2

我想要完成的是使用 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 然后通过代码或使用某些命令行重定向来调用此语句。

4

1 回答 1

3

首先,请注意,并非多页 PostScript 文件中的每一页都会显示完全相同的“边界框”值(事实上,这种情况很少见)。因此,您可能想找出所有可能的边界框(包括所有边界框)的共同点。

其次,您在运行时在控制台窗口中看到的是标准输入标准输出输出通道gs -sDEVICE=bbox的混合。但是,您要获取的信息将发送到stderr。如果将命令输出重定向到文件,则捕获的是stdout,而不是stderr!要禁止将某些版本和调试信息转到stderr ,请添加到命令行。-q

因此,为了获得所有页面边界框的“干净*”输出,您必须首先重定向 stderr通道,然后将其捕获到文件info.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

最后,您可能需要阅读以下答案,了解有关 Ghostscriptbbox设备的一些背景信息。您还可以在那里找到一些用于裁剪作业的替代 PostScript 代码:

于 2012-12-25T12:37:21.747 回答