当前位置: 首页 > news >正文

Unity使用iTextSharp导出PDF-02基础结构及设置中文字体

基础结构

1.创建一个Document对象
2.使用PdfWriter创建PDF文档
3.打开文档
4.添加内容,调用文档Add方法添加内容时,内容写入到输出流中
5.关闭文档

using UnityEngine;
using iTextSharp.text;
using System.IO;
using iTextSharp.text.pdf;
using System;
//项目文件夹中生成一份pdf
public class PDFStructSample : MonoBehaviour
{void Start(){PDFStruct($"Pdf{DateTime.Now.ToString("yyyyMMddHHmmss")}.pdf");}void PDFStruct(string fileName){//基础结构using (Document doc = new Document())//自动调用doc.Close()方法{try{//创建pdf文档PdfWriter.GetInstance(doc, new FileStream(fileName, FileMode.Create));       //打开pdf文档doc.Open();//pdf中显示一行文字:Hello PDF!doc.Add(new Paragraph("Hello PDF!"));}catch (IOException e){Debug.Log("IO异常" + e.Message);}catch (DocumentException e){Debug.Log("文档异常" + e.Message);}}}
}

设置pdf页面属性

页面大小,背景颜色,页边距。
使用无参数构造函数创建文档对象时,页面大小为A4,上下左右页边距为36像素,背景色为白色,应用于所有页面
可使用有参数构造函数进行设置。
例如:Document doc = new Document(PageSize.A4, 40f, 40f, 36f, 36f);
参数1是内置的页面,类型为Rectangle,根据需要可创建对象,自定义页面。
Rectangle可设置页面大小,背景颜色。
页面尺寸单位是像素,页面默认dpi是72,1英寸=72像素,1英寸=2.54厘米

设置中文字体

iTextSharp默认使用的是英文字体,没有中文字体。
开源字体:思源黑体体ttf格式,可在Github上查找
Pal3love/Source-Han-TrueType

  1. 加载字体,创建BaseFont
  2. 创建Font对象
  3. 创建文本对象的时候可设置字体
  4. Font对象可设置字体颜色,风格,大小等属性。

StreamingAssetsPath文件夹存放了思源字体Bold
依据文件路径,创建BaseFont对象,创建Font对象
BaseFont.CreateFont(boldFontFilePath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
参数1:字体路径
参数2:字体编码,IDENTITY_H表示横向文字,使用Unicode编码。
参数3:字体嵌入PDF中,避免电脑不存在该字体。

    string FontDirectory => UnityEngine.Application.streamingAssetsPath + "/Fonts/";string boldFontFilePath => FontDirectory + "SourceHanSansCN-Bold.ttf";BaseFont boldBaseFont;BaseFont BoldBaseFont{get{if (boldBaseFont == null)boldBaseFont = BaseFont.CreateFont(boldFontFilePath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);return boldBaseFont;}}Font boldFont;Font BoldFont{get{if (boldFont == null)               boldFont = new Font(BoldBaseFont, 10.5f);             return boldFont;}}
http://www.lryc.cn/news/534882.html

相关文章:

  • Kafka因文件句柄数过多导致挂掉的排查与解决
  • 【LeetCode Hot100 多维动态规划】最小路径和、最长回文子串、最长公共子序列、编辑距离
  • PRC框架-Dubbo
  • 智能检测摄像头模块在客流统计中的应用
  • [LLM面试题] 指示微调(Prompt-tuning)与 Prefix-tuning区别
  • 【CubeMX+STM32】SD卡 U盘文件系统 USB+FATFS
  • 在JVM的栈(虚拟机栈)中,除了栈帧(Stack Frame)还有什么?
  • # 解析Excel文件:处理Excel xlsx file not supported错误 [特殊字符]
  • 图片下载不下来?即便点了另存为也无法下载?两种方法教你百分之百下载下来
  • Unity项目实战-Player玩家控制脚本实现
  • CP AUTOSAR标准之ICUDriver(AUTOSAR_SWS_ICUDriver)(更新中……)
  • Python3 ImportError: cannot import name ‘XXX‘ from ‘XXX‘
  • [学习笔记] Kotlin Compose-Multiplatform
  • 【R语言】t检验
  • flutter ListView Item复用源码解析
  • Spring Boot 配置 Mybatis 读写分离
  • 网络初识-
  • DNS污染:网络世界的“隐形劫持”与防御
  • MQTT(Message Queuing Telemetry Transport)协议(三)
  • 多核cpu与时间片多线程的问题
  • 电脑出现蓝屏英文怎么办?查看修复过程
  • 安卓基础(第一集)
  • 【从零开始入门unity游戏开发之——C#篇56】C#补充知识点——模式匹配
  • 【数据可视化-16】珍爱网上海注册者情况分析
  • c/c++蓝桥杯经典编程题100道(21)背包问题
  • 电赛DEEPSEEK
  • VSOMEIP ROUTING应用和CLIENT应用之间交互的消息
  • HTML之基本布局div|span
  • Linux下学【MySQL】常用函数助你成为数据库大师~(配sql+实操图+案例巩固 通俗易懂版~)
  • 【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列