GhostScript错误

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.

任何想法这个错误是什么意思,以及如何解决这个问题?

没有源PDF文件,将无法给出任何好的具体建议。警告类型可能意味着input.pdf文件存在问题,并且其子集字体“Arial-BoldMT”未正确嵌入。'loca'表出现在OpenType字体中,并提供到字形位置的索引。因此,所讨论的子集字体似乎根据该表声称有188个字形,但实际上只包含93个字形描述。 - Kurt Pfeifle
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)

此外,由于警告中提到字体Arial-BoldMT,您应该首先使用pdfinfopdffonts工具检查输入和输出页面的嵌入字体状态。请注意保留HTML标签。
 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中提取字体进行进一步分析?”和“如何调查字体内部故障?”)


  1. GS如何区分“错误”和“警告”?
  2. 输出结果存在显著差异:输出结果没有原始文档的文本内容。
  3. “警告”已经显示版本号:8.71。
- StackOverflowNewbie
糟糕!它就在眼前,但我没看到...(v8.71)。-- “警告”意味着:将仍会生成有效的输出文档;但最好检查一下。而“错误”则意味着:输出肯定不是你想要的。我会更新我的答案... - Kurt Pfeifle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接