我无法将PDF页面分成两半。 通常我每个月都会为100多个不同大小的pdf做这件事。但是我遇到了一些给我错误的东西。
摘录的pdf页面:195.pdf
在我目前的pdf中,它位于第195页,我用以下内容提取了该页面:
gs -o 195.pdf -dFirstPage=195 -dLastPage=195 -sDEVICE=pdfwrite -dAutoRotatePages=/None original_file.pdf
此pdf(195.pdf)的页面大小为:
3152.13 x 612.28 pts
因此,当将它分成两半时,我使用:
gs -o left_sections.pdf -sDEVICE=pdfwrite -dAutoRotatePages=/None -g15760x6122 -c "<</PageOffset [0 0]>> setpagedevice" -f 195.pdf
这会产生以下错误:
Page 1
**** Error: ignoring recursive /SMask attribute.
Output may be incorrect.
**** Error: ignoring recursive /SMask attribute.
Output may be incorrect.
**** Error: ignoring recursive /SMask attribute.
Output may be incorrect.
**** Error: ignoring recursive /SMask attribute.
Output may be incorrect.
**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> GPL Ghostscript 9.19 <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF
**** specification.
**** The rendered output from this file may be incorrect.
我在创建的left_sections.pdf中可以直观地看到原始的唯一区别是顶部和顶部的一个小水平条纹。右下角。
我的ghostscript版本是9.19
任何可能导致此问题或如何解决此问题的想法?
最诚挚的问候 NiclasRådström
答案 0 :(得分:1)
好的首先要注意的是Ghostscript和pdfwrite设备不会'拆分'PDF文件,也不会合并它们或任何可能暗示生成的PDF文件与原始PDF文件有任何关系的东西。
PDF文件(如错误所示)是一个递归的SMask,即SMask引用本身,它实际上并不能很好地工作。该文件的一个例子是:
31 0 obj
<<
/Subtype /Image
/ColorSpace /DeviceGray
/Width 71
/Height 2700
/BitsPerComponent 8
/Length 191700
/SMask 31 0 R
>>
所以你可以看到图像使用了一个与实际图像相同的SMask,因此无限递归,这就是Ghostscript抱怨的原因。
一旦你遇到这种情况,损害已经完成,没有办法保证从中恢复。
现在您发布的是由Ghostscript本身生成的PDF,因此问题是否在原始文件中,或者pdfwrite生成的文件无效,这一点并不明显。我的猜测是后者。
除了尝试最新版本(9.20)以查看它是否已修复(可疑,我不记得这样的错误报告)和/或报告错误之外,你真的无能为力。如果您确实报告了需要提供示例文件的错误,那么如果您能找到一个简单的文件来重现它,它会受到更多关注,即不是很多页面文件......