PDF Ghostscript中页面超出范围错误的尺寸

时间:2018-01-08 10:48:41

标签: pdf ghostscript

我试图制作新的PDF,只改变第一页的尺寸(使用CropBox)。我使用了How do I crop pages 3&4 in a multipage pdf using ghostscript

的修改版本

这有什么奇怪的:一切都运行正常,但是当我在典型的应用程序(预览,Acrobat等)中打开PDF时,它们会崩溃或者我得到一个"警告:页面的尺寸可能超出范围"错误。在Acrobat中,只显示一个页面,即使页数为2,45,60或其他任何页面。

更奇怪的是:我通过电子邮件将PDF发送给某人,看是否是特定于机器的问题。在Gmail中,Google Apps的PDF查看器中的所有内容都很好看。所以这个过程很有效,'但看起来有关于维度或页面大小的问题会导致其他应用程序失效。

我尝试了多个GS选项(dPDFFitPage,dPrinted = false,dUseCropBox,将纸张大小更改为合法以外的其他内容),但似乎没有任何效果。

我附加了经历此过程的PDF版本并生成了这些错误。 https://www.dropbox.com/s/ka13b7bvxmql4d2/imfwb.pdf?dl=0

修改后的输出如下。 xmin,ymin,xmax,ymax,height,width是在较大的脚本中其他地方定义的变量,GS是其中的一部分。使用pdfinfo

抓取数据
gs \
-o output/#{filename} \
-sDEVICE=pdfwrite \
-c \"<</EndPage {
0 eq {
  pop /Page# where {
    /Page# get
    1 eq {
      (page 1) == flush

      [/CropBox [#{xmin} #{ymin} #{xmax} #{ymax}] /PAGE pdfmark
      true
    }
    {
      (not page 1) == flush

      [/CropBox [0 #{height.to_f} #{width.to_f} #{height.to_f}] /PAGE pdfmark
      true
    } ifelse
  }{
    true
  } ifelse
}
{
  false
}
ifelse
}
>> setpagedevice\" \
 -f #{filename}"
`#{cmd}`

1 个答案:

答案 0 :(得分:0)

对于第一次设置后的页面

[/CropBox [0 #{height.to_f} #{width.to_f} #{height.to_f}] /PAGE pdfmark

即。一个零高度的裁剪框!

E.g。如果您的示例文档第2页有裁剪框[0 792.0 612.0 792.0]

这肯定不是你想要的......

如果你真的想&#34;生成新的PDF只改变第一页的尺寸(使用CropBox)&#34; ,你为什么要改变后面页面的裁剪框呢? ?在这种情况下,根本不做任何事情!

为什么&#34; Page的尺寸可能超出范围&#34;

嗯,ISO 32000-1在其规范性附录C中声明:

  

默认用户空间中,最小页面大小应为3乘3单位

因此,根据较旧的PDF规范,页面高度0确实超出了PDF的范围!

与此同时,虽然ISO 32000-2已经放弃了这个要求,但严格来说,页面高度为零应该没什么可抱怨的......