1

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

/FirstChar 32
/LastChar 126

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

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

可能的方法:

手册:借助 FontForge 之类的程序,我们可以捕获带有选定字符的自定义字体,但是如何在 PDF 文档中指向自定义字符呢?PDF 只要求FirstCharLastChar

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

4

1 回答 1

4

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

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

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

这将是很多工作。正如@mkl 所说,您可能会更好地描述您的预期工作流程,我们会尝试更好地建议您如何实现它。例如,bot Adob​​e Acrobat Distiller 和 Ghostscript 的 pdfwrite 设备将在将 PostScript 转换为 PDF 时子集字体。

于 2012-12-05T08:26:13.110 回答