PDF:如何优化文件大小和转换为PNG(嵌入字体问题)

时间:2010-09-23 02:20:52

标签: pdf imagemagick ghostscript pdftk graphicsmagick

我有一个嵌入字体的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。

建议?

1 个答案:

答案 0 :(得分:3)

PDF中使用的字体似乎是OpenType字体。创建这些PDF的软件似乎已经对字体进行了子集化。在通过该软件进行字体嵌入和子集化时(“动态生成PDF” - 它是否也是Ghostscript?!?),似乎发生了一个问题,使其不符合规范100%。

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

现在您使用Ghostscript处理这些不完全'kosher'的PDF。 Ghostscript发出警告,但没有错误。

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

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

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

  1. 其中一个子集化字体根据表格声明字形数为188。
  2. 但实际上,实际的字体描述仅包含93个字形的定义。