3

在特定 PDF 上,运行以下命令时:

gs -dSAFER -dBATCH -dNOPAUSE -dQUIET -dFirstPage=1 -dLastPage=1 -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf

我收到此错误:

GPL Ghostscript 8.71: Warning: 'loca' length 188 is greater than numGlyphs 93 in the font MGOXZX+Arial-BoldMT.

任何想法这个错误意味着什么以及如何解决这个问题?

4

1 回答 1

3

首先,Ghostscript 没有将此声明为“错误”,而是“警告”。那是相当不同的。

其次,您要求 Ghostscript 输出 PDF 输入的第一页。它奏效了吗?在比较 output.pdf 和 input.pdf 的第一页时,您是否看到任何明显的差异?

第三,如果真的有问题,你应该指出你正在运行的 Ghostscript 版本。最近的一个是 8.71


更新:当然,StackOverflowNewbie 已经通过引用警告消息暗示了 Ghostscript 的版本......

“警告”的意思是:输出文件可能有问题(它本身仍然是有效的 PDF),但您最好检查一下。

“错误”表示:输出肯定有问题,Ghostscript 将中止所有进一步的处理;输出很可能甚至不是有效的 PDF。

有很多不同的方法可以进一步调试问题。但是,如果您没有看到有问题的文件,就不可能给出任何准确的建议。StackOverflowNewbie 报告输出页面看起来与输入不同。

所以这是要使用的大锤:添加-dDEBUG到命令行:

gs \
  -sOutputFile=output.pdf \
  -dDEBUG \
  -dLastPage=1 \
  -sDEVICE=pdfwrite \
   input.pdf

注意事项!这可能会在您的控制台中产生大量的 stderr/stdout 输出。

如果您已经知道或知道确切问题的根源(您甚至可以通过查看输入和输出 PDF 之间的视觉差异直接假设),您可以通过使用(而不是 -dDEBUG)来缩小范围以下之一,按顺序:

 -dPDFDEBUG      # (debug PDF Interpreter)
 -dPDFWRDEBUG    # (debug PDF Writer)
 -dTTFDEBUG      # (debug TTF Fonts)
 -dCCFONTDEBUG   # (debug compiled-in Fonts)
 -dFAPIDEBUG     # (debug Font API)
 -dCFFDEBUG      # (debug CFF Fonts)
 -dCMAPDEBUG     # (debug CMAP)
 -dDOCIEDEBUG    # (debug CIE color)
 -dSETPDDEBUG    # (debug setpagedevice)
 -dSTRESDEBUG    # (debug Static Resources)
 -dVGIFDEBUG     # (debug ViewGIF)
 -dVJPGDEBUG     # (debug ViewJPEG)
 -dINITDEBUG     # (debug Initialization)
 -dEPSDEBUG      # (debug EPS handling)
 -dPDFOPTDEBUG   # (debug PDF Optimizer/Linearizer)

此外,由于警告提到 font ,您应该首先和的帮助下检查输入和输出页面Arial-BoldMT的字体嵌入状态:pdfinfopdffonts

 pdfinfo -f 1 -l 1 -box input.pdf
 pdfinfo -box output.pdf
 pdffonts -f 1 -l 1 input.pdf
 pdffonts output.pdf

更新2:

您可以尝试从原始 PDF 中提取字体以进行进一步调查。(如果您不知道如何执行此操作,请提出新的、单独的 SO 问题,例如“如何从 PDF 中提取字体以进行进一步分析?”“如何调查字体的内部故障?”

于 2010-09-17T07:41:45.430 回答