GhostScript 使用 bbox 裁剪 Postscript 文件
Posted
技术标签:
【中文标题】GhostScript 使用 bbox 裁剪 Postscript 文件【英文标题】:GhostScript use bbox to crop Postscript file 【发布时间】:2012-12-21 18:07:53 【问题描述】:我想要完成的是使用 bbox 中描述的输出裁剪名为 example.ps 的 PostScript 文件。我在批处理过程中执行此操作,其中某些文件的 bbox 可能不同。我看过 pdfcrop 并看到它使用了类似的方法。这是我现在用来裁剪的命令。
gs -o cropped.pdf \
-sDEVICE=pdfwrite \
-dDEVICEWIDTHPOINTS=160 \
-dDEVICEHEIGHTPOINTS=840 \
-dFIXEDMEDIA \
-c "0 0 translate 0 0 160 840 rectclip" \
-f example.ps
这个命令的问题是我必须指定要使用的宽度和高度。我想要发生的是一些如何首先调用 bbox 然后通过代码或使用某些命令行重定向来调用此语句。
【问题讨论】:
解析输入文件、读取 BB 行并编写适当的 gs 命令很简单。具体情况取决于您要使用的语言。 postscipt 中的 bbox 行不正确,所以我需要使用 bbox 命令找到正确的 bbox。然后根据 bbox 的输出创建 gs 命令。 这是windows cmd.exe shell?我可能会在 bash 和 awk 方面提供帮助,但目前我对 windows 不太了解。 那么你运行 gs 两次,首先使用 -sDEVICE=bbox,解析输出,然后再次使用 pdf 设备。一个更令人满意的选择是深入研究 pdf 设备驱动程序并给它一个选项来做你想做的事...... 我尝试通过包含“>> out.txt”来重定向 gs 命令的输出,但我似乎无法捕获 bbox 输出,因为该命令调用了一个 shell。 【参考方案1】:首先,请注意,并非多页 PostScript 文件中的每一页都会显示完全相同的“边界框”值(事实上,这种情况很少见)。因此,您可能想找出所有可能的边界框(包括所有边界框)的公分母。
其次,当您运行gs -sDEVICE=bbox
时,您在控制台窗口中看到的是stdin 和stdout 输出通道的混合。但是,您要获取的信息将发送到 stderr。如果你将命令输出重定向到一个文件,你捕获的是 stdout,而不是 stderr!要禁止将某些版本和调试信息转到 stderr,请将 -q
添加到命令行。
因此,为了获得所有页面边界框的“干净”输出,您必须首先重定向 stderr 通道,然后将其捕获到文件 info.xml 中。 txt。所以运行这样的命令(或类似的):
gs \
-dBATCH \
-dNOPAUSE \
-q \
-sDEVICE=bbox \
example.ps \
2>&1 \
| tee info.txt
甚至这个,如果你不需要关于HiResBoundingBox
的信息:
gs \
-dBATCH \
-dNOPAUSE \
-q \
-sDEVICE=bbox \
example.ps \
2>&1 \
| grep ^%%Bound \
| tee info.txt
另外,顺便说一句,注意可以确定 PostScript 以及 PDF 输入文件的边界框。
这应该会为您提供如下输出,其中每一行代表输入文件的一个页面,从第一行的第 1 页开始:
%%BoundingBox: 36 18 553 802
%%BoundingBox: 37 18 553 804
%%BoundingBox: 36 18 553 802
%%BoundingBox: 37 668 552 803
%%BoundingBox: 40 68 532 757
最后,您可能想阅读以下答案,了解有关 Ghostscript 的 bbox
设备的一些背景信息。您还可以在那里找到一些用于裁剪作业的替代 PostScript 代码:
【讨论】:
我使用的是windows,所以我不能使用grep和tee命令来重定向stderr @user1864948:在 Windows 上,您可以使用findstr "%%Bound"
而不是 grep。您可以使用普通重定向代替tee
:1> info.txt
。以上是关于GhostScript 使用 bbox 裁剪 Postscript 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Ghostscript 将 AI(嵌入 PDF)裁剪为 PNG?
如何使用带有页面特定裁剪框数组的 ghostscript 裁剪多页 pdf