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

PDF Dimensions of Page Out of Range Errors from Ghostscript

我正在尝试生成仅改变第一页尺寸的新 PDF(使用 CropBox)。我使用了

的修改版本

奇怪的是:一切运行正常,但当我在典型应用程序(Preview、Acrobat 等)中打开 PDF 时,它们要么崩溃,要么出现 "Warning: Dimensions of Page May be Out of Range" 错误。在 Acrobat 中,只会显示一页,即使页数是 2、45、60 或其他。

更奇怪的是:我将 PDF 通过电子邮件发送给某人,以查看它是否是特定于机器的问题。在 Gmail 中,Google Apps 的 PDF 查看器中一切正常。所以这个过程 'worked,' 但看起来尺寸或页面大小有一些东西正在让其他应用程序关闭。

我已经尝试了多个 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}`

对于第一个设置之后的页面

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

即高度为零的裁剪框!

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

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

如果你真的想要"produce new PDFs that alter dimensions only the first page (using CropBox)",你为什么要改变后面页面的裁剪框呢?在这种情况下根本不要做任何事情!


为什么"Dimensions of Page May be Out of Range"

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

The minimum page size should be 3 by 3 units in default user space

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

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