2010-09-17 369 views
3

在一个特定的PDF,运行以下命令时:GhostScript的错误

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. 

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

+0

无法访问源代码PDF无法提供任何好的具体建议。警告的类型可能意味着input.pdf是错误,并且其子集字体'Arial-BoldMT'没有被正确嵌入,'loca'表出现在OpenType字体中并且呈现出字形位置的索引,因此,所讨论的子集字体似乎要求根据表的188个字形,但只包含93个实际字形描述 – 2010-09-18 10:44:47

回答

3

首先,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之间的视觉差异),你可以通过使用(缩小)

-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,应先检查,输入和输出页面的字体嵌入的烦躁的状态:-DDEBUG)下列情况之一,按顺序在pdfinfopdffonts的帮助下:

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

UPDATE2:

你可以尝试提取从原来的PDF作进一步调查的字体(一个或多个)。 (如果您不知道如何操作,请询问新的单独的SO问题,如“我如何从PDF中提取字体以供进一步分析?“ and ”如何查看内部错误的字体?“

+0

1. GS如何区分“错误”和“警告”?2.输出有显着差异:输出没有原始文档的文本内容3.“警告”已经显示版本:8.71。 – StackOverflowNewbie 2010-09-17 23:27:15

+0

D'oh!那里是在plai ñ视线,但我没有看到它...(v8.71)。 - “警告”表示:仍然会生成有效的输出文件;但更好地检查它。 “错误”的意思是:输出肯定不是你想要的。我会更新我的答案... – 2010-09-18 10:14:09

相关问题