自己研究了pdf规范,做一个总结。
一. pdf文档里面字体种类:
1)Type1(还包括扩展字体MMType1);2)TrueType(这种类型字体文件的扩展名是.ttf );3)Type3;4)Type0(composite fonts)5)OpenType
注意:pdf支持两个字体相关的子类:CIDFonts和CMaps;但是CIDFonts不能直接使用,只能作为Type0字体的组件使用;
二. Font Subsets
对于字体Type1和TrueType,可以存在Font Subsets,当存在Font Subsets时,且BaseFont为”六位随机字母+“这样的前缀时,将会存在font descriptor,也就是描述字体的stream存在,这种情况下就可以判定字体是嵌入的,不受打开工具及平台的影响。
例如:下面就是一个TrueType字体的 Font Subsets的FontName:
三 Type0字体
Type0是一个包含类字体对象CIDFont的字体,CIDFonts相当于 Type0的descendent,在pdf文档中的关键字为DescendantFonts,当对象存在DescendantFonts关键字时,表示此文字的字体是Type0类型:
CIDFont又可以分为:CIDFontType0和CIDFontType2。
其中CIDFontType0的字体描述是基于Adobe Type 1;
CIDFontType2的字体描述是基于TrueType;
例如:在pdf文档中可以看到 CIDFont的分类:
四 pdf字体嵌入:
原理:pdf文档字体嵌入方式:以PDF stream的形式嵌入,这样的stream对象也叫做font file,从而使得pdf文字不受打开工具以及操作系统自带字体的影响。查看pdf规范文档可得不同的fontFile对应的字体类型:
注意:
1) Font Subsets存在的情况下,并且BaseFont的FontName是按照规则的前缀时;
2)DescendantFonts存在的情况下,由于对象之间的包含关系,记得多次判断。
参考书籍:《pdf_reference.pdf》