Files
XplorePlane/XP.ReportEngine/Documents/FontFilesGuidance.md
T

2.6 KiB

字体方案说明 | Font Strategy

当前方案 | Current Approach

XP.ReportEngine 使用 Windows 系统自带字体 生成 PDF,无需额外下载或嵌入字体文件。

语言 字体 文件 说明
简体中文 / 繁体中文 微软雅黑 C:\Windows\Fonts\msyh.ttc Windows 10+ 自带,支持简繁体
西文(英文等) Arial C:\Windows\Fonts\arial.ttf Windows 自带

为什么使用系统字体 | Why System Fonts

  1. Telerik RadPdfViewer 兼容性 — 系统字体生成的 PDF 在 Telerik RadPdfViewer 中显示正常,不会出现中文乱码
  2. 无需额外部署 — 不需要随应用程序分发字体文件,减小安装包体积
  3. 跨阅读器兼容 — 字体以子集嵌入 PDF 中(PREFER_EMBEDDED),在任何 PDF 阅读器中都能正确显示

后备机制 | Fallback Mechanism

ITextPdfRenderer 按以下顺序加载字体:

微软雅黑 (msyh.ttc)
    ↓ 加载失败
宋体 (simsun.ttc)
    ↓ 加载失败
_cjkFont = null

Arial (arial.ttf)
    ↓ 加载失败
_westernFont = null

最终后备: iText 内置 Helvetica(不支持中文字符)

语言选择逻辑:

  • zh-CN / zh-TW → 优先使用微软雅黑
  • en-US → 优先使用 Arial,后备微软雅黑(微软雅黑也支持西文)

字体子集化 | Font Subsetting

iText7 在 document.Close() 时执行字体子集化:

  • 分析文档中实际使用的字符
  • 从完整字体文件(微软雅黑约 15MB)中提取用到的字形子集
  • 仅嵌入子集到 PDF 中

这使得最终 PDF 文件大小合理(通常 200KB-2MB),但 Close() 操作需要约 1-1.5 秒。

性能说明 | Performance Notes

阶段 首次耗时 后续耗时 说明
字体加载 ~5-6s 0ms 首次需从磁盘读取 TTC 文件并解析
字体子集化 ~1.2s ~1.2s 每次生成都需要,与字符数量相关

模块通过 WarmUpAsync() 预热机制在应用启动时后台完成首次字体加载,用户首次生成报告时不会感受到延迟。

系统要求 | System Requirements

  • Windows 10 或更高版本(微软雅黑为系统预装字体)
  • 如果在精简版 Windows 上运行,需确保系统已安装微软雅黑字体

自定义字体扩展 | Custom Font Extension

如需添加自定义字体:

  1. 将字体文件(.ttf / .ttc / .otf)放入项目 Fonts/ 目录
  2. .csproj 中取消注释嵌入资源配置:
    <EmbeddedResource Include="Fonts\*.otf" />
    <EmbeddedResource Include="Fonts\*.ttf" />
    
  3. ITextPdfRenderer.InitializeFonts() 中扩展加载逻辑