我有 3 个相当大的 PDF 文件,这些文件都是使用ghostscript
同一个源 pdf 生成的xelatex
(均在 ubuntu linux 下)。这 3 个文件从源中选择了不同的区域,如下所示
gs -o out.pdf -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=26562 -dDEVICEHEIGHTPOINTS=4252 -dFIXEDMEDIA -dCompatibilityLevel=1.4 -dEmbedAllFonts=true -c "<</PageOffset [-7447 0]>> setpagedevice" -f in.pdf
PageOffset
这三个文件只有和尺寸不同。
最后两个文件不是从原点开始的,但在 Adobe Acrobat Reader DC 中无法正确显示(在 Windows 下测试)。它们在我尝试过的所有其他 PDF 查看器中都能显示,但我需要将它们提交给打印服务,而打印服务似乎无法解决这个问题。
我可以尝试什么来修复这些文件(我尝试过在 Ubuntu 下使用 pdf 修复实用程序,但是没有用)?
答案1
可以通过减小文档的媒体大小来避免此问题。如果尺寸过大,Adobe Acrobat 似乎无法显示文档(而其他查看器可能会显示)。
尝试运行
gs -o out_a.pdf -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=[half-width] -dDEVICEHEIGHTPOINTS=[half-height] -dPDFFitPage -dCompatibilityLevel=1.4 -dEmbedAllFonts=true -dDownsampleColorImages=false -dDownsampleGrayImages=false -dDownsampleMonoImages=false -f out.pdf
使用先前值的[half-height]
一半[half-width]
,然后 out.pdf 输出您的初始 ghostscript 命令的输出。
如果仍然不起作用,您可能需要尝试更小的值。
答案2
我刚刚遇到这个问题,Acrobat 显示空白 PDF,并伴有错误“图像数据不足”。有问题的 PDF 是由 libtiff 生成的。此解决方案仅适用于 libtiff 生成的 PDF。
在这种情况下,libtiff 使用 24 位颜色配置文件,但表示图像只有 1 位(单色),并且 Acrobat 和 Ghostscript 都首选颜色配置文件的位深度(因此无法打开文件),而其他 PDF 阅读器首选文件的覆盖位深度(并且可以正常显示文件)。
就我而言,解决方法是更改 PDF 文件以使用不同的颜色配置文件,这意味着对此文本进行二进制替换:
/ColorSpace [/ICCBased 7 0 R]
文本如下:
/ColorSpace /DeviceGray %0 R]
开始%
注释,忽略该行的其余数据,这是必需的,以便后续数据的偏移量不会改变。由于我在 Linux 上,我使用以下命令进行了更改sed
:
sed -i 's|/ColorSpace \[/ICCBased 7 0 R\]|/ColorSpace /DeviceGray %0 R]|' file.pdf
这个修复是由Ghostscript 项目并让我所有损坏的 PDF 再次恢复运行。