2

我有一个带有嵌入字体的 PDF,我似乎无法使用。现在,我正在使用 GhostScript 并尝试做两件事:

  • 最小化 PDF 文件大小:

    gswin32c -dSAFER -dBATCH -dNOPAUSE -dQUIET -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf

  • 将 PDF 转换为 PNG(超级示例,用于创建其他缩略图):

    gswin32c -dSAFER -dBATCH -dNOPAUSE -dQUIET -dFirstPage=1 -dLastPage=1 -r288 -sDEVICE=png16m -sOutputFile=output.pdf input.pdf

以上在处理扫描文档时效果很好。但是当我对嵌入字体的 PDF 运行它们时(PDF 是由应用程序动态生成的),它失败了。这是我得到的错误:

GPL Ghostscript 8.71: Warning: 'loca' length 274 is greater than numGlyphs 136 i
n the font UUGHDE+ArialMT.
GPL Ghostscript 8.71: Warning: 'loca' length 274 is greater than numGlyphs 136 i
n the font UUGHDE+ArialMT.
GPL Ghostscript 8.71: Warning: 'loca' length 188 is greater than numGlyphs 93 in
 the font UUGHDE+Arial-BoldMT.
GPL Ghostscript 8.71: Warning: 'loca' length 188 is greater than numGlyphs 93 in
 the font UUGHDE+Arial-BoldMT.

除了 GhostScript,我还可以访问 PDFTK 和 ImageMagick(可能会被 GraphicsMagick 取代)。我也对其他解决方案持开放态度。

开发在 WAMP 上。部署到 LAMP。

建议?

4

1 回答 1

4

PDF 中使用的字体似乎是 OpenType 字体。创建这些 PDF 的软件似乎对字体进行了子集化。在这个软件的字体嵌入和子集化过程中(它“动态生成 PDF”——它也是 Ghostscript 吗?!?),似乎出现了一个问题,使它不 100% 符合规范。

'loca' 表是 OpenType 字体描述的一部分。它们代表所有字形位置的索引。

现在,您可以使用 Ghostscript 处理这些不完全“洁净”的 PDF。Ghostscript 发出警告,但没有错误。

GS 错误通常意味着:“我将中止进一步的处理。我无法解决问题或修复这个损坏的文件。如果我已经编写了输出文件,它们将毫无用处。”

GS 警告通常意味着:“我遇到了问题。但我会继续处理输入并解决它。我已经编写了一个有效的输出文件。但你最好检查它,尤其是它的保真度!”

您看到的警告(不是错误!)意味着:

  1. 根据该表,有问题的子集字体之一声称字形的数量为 188。
  2. 但实际上,实际的字体描述仅包含 93 种字形的定义。
于 2010-09-23T12:18:11.957 回答