在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
如果有其他特定需求(如兼容性優化),可以進一步調整判斷邏輯。