Ghostscript - 错误:忽略递归/ SMask属性,输出可能不正确

时间:2016-10-25 12:47:38

标签: pdf ghostscript

我无法将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

1 个答案:

答案 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)以查看它是否已修复(可疑,我不记得这样的错误报告)和/或报告错误之外,你真的无能为力。如果您确实报告了需要提供示例文件的错误,那么如果您能找到一个简单的文件来重现它,它会受到更多关注,即不是很多页面文件......