如何在PDF中嵌入UTF-8字体?

时间:2012-12-05 00:49:05

标签: pdf utf-8 fonts pdf-generation

为避免添加不必要的字体部分,我们定义

/FirstChar 32
/LastChar 126

用于在PDF文档中嵌入字体。但是,这不适用于UTF-8字体,因为我们可能使用不在系列中的字符(整个UTF-8中的随机字符)。另一方面,不可能嵌入整个UTF-8字体,因为它对于PDF文档来说太大了(当然也没用)。

如何选择性地嵌入带有几个字符的字体?我的问题是PDF代码(如何编写)?

可能的方法:

手册:借助FontForge等程序,我们可以捕获包含所选字符的自定义字体,但 如何指向PDF文档中的自定义字符?< / em> PDF仅询问FirstCharLastChar

自动(首选):将整个UTF-8字体嵌入到PDF文档中,然后优化pdf文档(使用pdftk等工具)以删除不必要的字符。 有这样的工具吗?

1 个答案:

答案 0 :(得分:4)

在PDF文件中定义FirstChar和LastChar根本不会影响实际的字体数据。为了在字体中嵌入少于整个字符范围,您需要“子集”实际字体数据。也就是说,找到每个字形的描述,存储所需的每个描述,然后生成一个适当的框架来包含字形描述,这取决于字体类型。

一般来说,没有“UTF-8”字体。字体包含一系列关于如何绘制多个字形的指令,以及一种从字符代码索引以找到正确的字形描述的方法。对于PostScript字体,这由Encoding给出,对于CIDFonts由CMap给出,对于TrueType字体,由嵌入在字体中的CMAP子表给出。

因此,为了实现您的目标,您需要了解要打算彻底使用的字体格式(PostScript类型1,类型2,CIDFont或TrueType),能够确定所需的字形描述,从中提取字体,然后构建一个新的字体,其中只包含那些必需的字形描述。

这将是很多工作。正如@mkl所说,你可能会更好地建议你描述你想要的工作流程,我们会尝试更好地告诉你如何实现它。例如,在将PostScript转换为PDF时,Adobe Acrobat Distiller和Ghostscript的pdfwrite设备将对字体进行子集化。