ghostscript 裁剪 pdf 不正确

Posted

技术标签:

【中文标题】ghostscript 裁剪 pdf 不正确【英文标题】:ghostscript crop pdf not correctly 【发布时间】:2017-09-05 09:26:47 【问题描述】:

inputPdf

使用gswin32c.exe -o nul -sDEVICE=bbox bbox.pdf,我知道这个pdf的边界框是

%%边界框:6292 6865 8108 7535

%%HiResBoundingBox: 6292.907808 6865.505790 8107.091753 7534.493770,

我想得到一个包含 BoundingBox 内容的 pdf。

我正在使用以下命令来裁剪 PDF:

 gswin32c -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1 -o croped.pdf -dDEVICEWIDTHPOINTS=1815 -dDEVICEHEIGHTPOINTS=670 -dFIXEDMEDIA -c "6292 6865 translate 6292 6865 8107 7534 rectclip" -f bbox.pdf

gswin32c -dQUIET -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1 -o croped.pdf -dDEVICEWIDTHPOINTS=1815 -dDEVICEHEIGHTPOINTS=670 -dFIXEDMEDIA -c "<</PageOffset [6292 6865]>> setpagedevice" -f bbox.pdf

我有一个空白的 pdf 文件。

这个命令

gswin32c.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=croped.pdf -c "[/CropBox [6292.907808 6865.505790 8107.091753 7534.493770] /PAGES pdfmark" -f bbox.pdf

我有一个原始文件。

如何正确裁剪此 pdf。

非常感谢!

【问题讨论】:

【参考方案1】:

BoundingBox 在我看来很可疑。

在任何情况下,您都不能轻易地用 Ghostscript 做您想做的事情,因为 PDF 解释器使用 PDF 文件中的信息来设置媒体大小。

前两个命令行“可能”有效,但您将 CTM 翻译成错误的方向。您已将原点 (0,0) 从左下角向上和向右移动。这使页面的内容远离媒体,这就是你得到一个空白页面的原因。您可以尝试使用相同的值,但取反,以便原点向下和向左移动。从您引用的 BoundingBox 来看,这是正确的方向。

gswin32c -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1 -o croped.pdf -dDEVICEWIDTHPOINTS=1816 -dDEVICEHEIGHTPOINTS=670 -dFIXEDMEDIA -c "-6292 -6865 translate" -f bbox.pdf

您不需要 rectclip,因为内容已经被剪辑到页面上。

第三个命令行也可以工作,除了您在处理 PDF 文件之前 设置了 CropBox,因此 PDF 解释器从 PDF 文件中读取 CropBox 并覆盖您设置的那个。尝试在输入文件后设置。

gswin32c.exe -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=croped.pdf bbox.pdf -c "[/CropBox [6292.907808 6865.505790 8107.091753 7534.493770] /PAGES pdfmark" -f

[编辑]

好的,所以第一个命令行不起作用的原因是(正如我所怀疑的)因为 PDF 解释器在运行 PDF 之前会重置图形状态,所以它只是丢弃了“翻译”。

如果您对 PageOffset 数组中的操作数求反,第二个命令行对我来说效果很好:

gswin32c -sDEVICE=pdfwrite -sOutputFile=\temp\out.pdf -dDEVICEWIDTHPOINTS=1815 -dDEVICEHEIGHTPOINTS=670 -dFIXEDMEDIA -c "<</PageOffset [-6292 -6865]>>setpagedevice" -f D:\Users\ken\Downloads\bbox.pdf

第三个命令行不起作用,因为它为所有页面设置了 CropBox,这是默认设置,可以通过在每个页面上设置 CropBox 来覆盖。您的原始 PDF 文件包含由 PDF 解释器保留的 CropBox(与 MediaBox 相同),因此 PAGES CropBox 被特定于页面的 CropBox 覆盖。

但是上面的命令行对我来说很好用。

【讨论】:

@reply,非常感谢您的回复。但不幸的是,我仍然无法工作。奇怪的pdf是here。非常感谢。 在我的回答中查看编辑 它对我很有帮助。非常感谢你。我明白为什么 PageOffset 设置为负数。再次感谢。

以上是关于ghostscript 裁剪 pdf 不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ghostscript 打印时页面裁剪和旋转不正确

Ghostscript /crop box在Linux中无法正确打印

如何使用带有页面特定裁剪框数组的 ghostscript 裁剪多页 pdf

如何使用 Ghostscript 裁剪 pdf(无需手动输入边界框)

如何使用 ghostscript 在多页 pdf 中裁剪第 3 和第 4 页

Ghostscript:如何将 STDIN 自动裁剪为“边界框”并写入 PDF?