如何确认TrueType PDF字体缺少字形

时间:2014-10-16 06:34:21

标签: pdf fonts ghostscript acrobat true-type-fonts

我有一张PDF,可以在Acrobat中呈现,但在打印机RIP的PDF到PS转换过程中无法打印。在使用pdftk解压缩并进行编辑后,我发现如果我替换某个字体的用法,它将会打印出来。

字体是一个奇怪的字体,一个带有单个字符(空格)的TrueType子集。

如果我通过Ghostscript传递PDF,则报告没有错误,但是Acrobat飞行前检查会报告缺少空格的字形。原始文件未报告此错误。我只是使用一个基本命令:gswin32c -dBATCH -dNOPAUSE -sDEVICE = pdfwrite -o gs.pdf original_sample.pdf

我从原始PDF中提取了字体数据并将其保存。运行TTFDUMP.exe会产生一个有趣的结果,似乎缺少'glyf'表:

4. 'glyf' - chksm = 0x00000000, off = 0x00000979, len =        0
5. 'head' - chksm = 0xE463EA67, off = 0x00000979, len =       54

只是想知道,我是否正确地解释了这个结果?对从PDF中提取的数据运行这样的TTFDUMP是否有效?我认为根据规范需要'glyf'表,至少对前4个必要字符是必需的。

在ghostscript PDF上运行TTFDUMP会产生类似的结果但是有一个1字节的'glyf'表。

如果是这样的话,似乎Acrobat并不特别关心其他程序(包括打印机)所缺少的空间。奇怪的是它没有被报告为丢失,直到它通过Ghostscript。

PDF由Adobe InDesign创建,字体受版权保护,因此我无法共享。

编辑 - 我接受了Ken的答案,因为他帮助我使用了Ghostscript bug跟踪器。总之,由于缺少glyf表,似乎字体被打破了。除非我听到其他情况,否则我不得不假设这是InDesign中的一个错误,并会继续调查。

1 个答案:

答案 0 :(得分:2)

是的,你可以在嵌入的子集字体上运行ttfdump,它仍然是一个完全有效的字体。

缺少的字形不是特别的问题,因为使用了.notdef字形,缺少.notdef意味着字体不合法。

我认为你错误地认为共享PDF文件的合法性(从字体嵌入的角度来看)。实际上,您看到的每个PDF文件都包含版权字体,但允许这些文件作为PDF(或实际上是PostScript)文件的一部分进行嵌入和分发。 TrueType字体包含控制字体DRM的标志,并且可以拒绝嵌入PDF(或其他格式)。 Ghostscript将这些嵌入标志与Acrobat Distiller和其他Adobe产品一样尊重。

有些字体无意中随DRM一起提供,阻止了嵌入,并且在这些字体中有一个列表,以及来自字体代工厂的明确声明,允许嵌入这些字体。几年前我认为这是在Adobe网站上的某个地方。

因此,如果您有一个嵌入了字体的PDF文件(特别是如果它是由Adobe应用程序生成的),那么我很乐意合法分享。

我在查明实际问题是什么以及如何使用Ghostscript方面遇到了一些麻烦。如果你正在运行PDF-> PS然后再回到PDF,那么所有的赌注都是坦白的。往返文件经常会引发问题。

无论如何,我很高兴看到这个文件,但你必须让它可用。