ghostscript crop pdf 不正确

ghostscript crop pdf not correctly

inputPdf

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

%%边界框: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。

非常感谢!

BoundingBox 在我看来很可疑。

在任何情况下,您都无法轻而易举地使用 Ghostscript 进行操作,因为 PDF 解释器使用 PDF 文件中的信息来设置媒体大小。

前两个命令行 'might' 有效,但您将 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

您不需要矩形剪辑,因为内容已经剪辑到页面上了。

第三个命令行也可以工作,只是您在 之前 处理 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 之前重置了图形状态,所以它只是丢弃了 'translate'.

如果您对 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 覆盖。

但是上面的命令行对我来说工作得很好。