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 /crop box在Linux中无法正确打印
如何使用带有页面特定裁剪框数组的 ghostscript 裁剪多页 pdf
如何使用 Ghostscript 裁剪 pdf(无需手动输入边界框)