**CID字体** 和 **Simple字体**
在PDF中,字体类型主要分为 CID字体 和 Simple字体 两大类,它们的主要区别在于编码方式和适用场景。以下是它们的详细对比:
1. CID字体(CID-keyed Fonts)
CID(Character Identifier)字体使用 数字索引(CID) 直接映射字形,适用于 多语言、复杂字符集(如中文、日文、韩文等)。
主要分为两种:
(1) CIDType0Font
- 特点:
- 基于 CFF(Compact Font Format) 的PostScript轮廓字体(通常为
.otf
) - 支持 CID-keyed 编码,适合高压缩率的矢量字体
- 常用于 Adobe Asian Fonts(如中文字体)
- 基于 CFF(Compact Font Format) 的PostScript轮廓字体(通常为
- 示例:思源黑体、Adobe 宋体
(2) CIDType2Font
- 特点:
- 基于 TrueType 轮廓(通常为
.ttf
) - 同样使用CID映射,但字形数据是TrueType格式
- 支持 Unicode 映射(通过
ToUnicode
表)
- 基于 TrueType 轮廓(通常为
- 示例:大部分支持多语言的TrueType字体(如Arial Unicode MS)
2. Simple字体(Simple Fonts)
Simple字体使用 字符名称(Glyph Name)或8位编码 直接引用字形,适用于 拉丁语系等小字符集。
主要分为三种:
(1) SimpleType1Font
- 特点:
- 基于 Type1 格式(PostScript
.pfb
或.afm
) - 使用 标准编码(如WinAnsi、MacRoman)或自定义编码
- 仅支持 256个字符(8位编码)
- 基于 Type1 格式(PostScript
- 示例:Times New Roman、Helvetica
(2) SimpleTrueTypeFont
- 特点:
- 基于 TrueType 轮廓(
.ttf
) - 同样限制在 256个字符,但使用TrueType字形数据
- 可通过
ToUnicode
表支持部分Unicode字符
- 基于 TrueType 轮廓(
- 示例:Symbol、Wingdings(符号字体)
(3) StandardFonts(PDF内置14种标准字体)
- 特点:
- PDF规范定义的 14种标准字体,无需嵌入
- 使用 WinAnsi/MacRoman 编码
- 仅支持基本拉丁字符
- 列表:
Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique
Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique
Times-Roman, Times-Bold, Times-Italic, Times-BoldItalic
Symbol, ZapfDingbats
核心区别总结
特性 | CID字体 | Simple字体 |
---|---|---|
编码方式 | CID数字索引 | 8位编码(0-255) |
字符集支持 | 多语言(如CJK) | 拉丁语系(有限字符) |
字形数据格式 | CFF(Type0)或TTF(Type2) | Type1或TTF |
是否支持Unicode | 是(通过ToUnicode 表) | 有限支持(仅SimpleTrueType) |
典型用途 | 中文/日文/韩文PDF | 英文PDF、符号字体 |
如何选择?
-
用CID字体(Type0/Type2):
- 需要嵌入中文、日文、韩文等宽字符集
- 字体包含超过256个字形
-
用Simple字体(Type1/TrueType):
- 仅需支持英文、数字、符号(如Webdings)
- 兼容旧版PDF阅读器(某些设备对CID支持较差)
-
用StandardFonts:
- 文档仅使用基本拉丁字符,且希望减小文件体积(无需嵌入字体)。
你的代码中的应用
在之前的EmbedFontSmart
函数中:
- Symbol/Webdings等符号字体 → 适合
SimpleTrueTypeFont
(因为它们是8位编码的符号集) - 普通TrueType字体(如Arial) → 优先用
CIDType2Font
以支持Unicode
如果有其他特定需求(如兼容性优化),可以进一步调整判断逻辑。