【问题标题】:GhostScript Error鬼脚本错误
【发布时间】:2010-09-17 01:56:31
【问题描述】:

在特定的 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' 表出现 f.e.在 OpenType 字体中,并为字形位置提供索引。因此,根据表格,有问题的子集字体似乎声称有 188 个字形,但仅包含 93 个实际字形形状描述。

标签: pdf ghostscript


【解决方案1】:

首先,Ghostscript 没有将此声明为“错误”,而是“警告”。差别很大。

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

第三,如果真的有问题,你应该指出你正在运行的 Ghostscript 版本。 most recent one is 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,您应该首先检查both的字体嵌入状态,输入和输出页面的帮助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 中提取字体以进行进一步分析?”“我该如何调查内部故障的字体?")

【讨论】:

  • 1. GS 如何区分“错误”和“警告”? 2. 输出有显着差异:输出没有原始文档的文字内容。 3.“警告”已经显示版本:8.71。
  • 天啊!它就在那里,但我没有看到它......(v8.71)。 -- “警告”是指:仍然会产生一个有效的输出文件;但最好检查一下。 “错误”的意思是:输出肯定不是你想要的。我会更新我的答案...
猜你喜欢
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
相关资源
最近更新 更多