来自 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 已经放弃了这一要求,因此严格来说,页面高度为零应该没有什么可抱怨的...
我正在尝试生成仅改变第一页尺寸的新 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 已经放弃了这一要求,因此严格来说,页面高度为零应该没有什么可抱怨的...