Command line GhostScript使用bbox裁剪Postscript文件

Command line GhostScript使用bbox裁剪Postscript文件,command-line,runtime,crop,ghostscript,postscript,Command Line,Runtime,Crop,Ghostscript,Postscript,我试图完成的是使用bbox中描述的输出裁剪名为example.ps的PostScript文件。我是在批处理过程中这样做的,在批处理过程中,bbox对于某些文件可能是不同的。我看过pdfcrop,发现它使用了类似的方法。这是我现在用来裁剪的命令 gs -o cropped.pdf \ -sDEVICE=pdfwrite \ -dDEVICEWIDTHPOINTS=160 \ -dDEVICEHEIGHTPOINTS=840 \ -dFIXEDMEDIA \ -c "0

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

首先,请注意,并非多页PostScript文件中的每个页面都会显示完全相同的“边界框”值(事实上,这种情况相当罕见)。因此,您可能希望找出所有可能的边界框(其中包括所有边界框)的公分母

其次,当您运行
gs-sDEVICE=bbox
时,您在控制台窗口中看到的是stdin和stdout输出通道的混合。但是,您要查找的信息将被发送到stderr。如果您将命令输出重定向到一个文件,那么您捕获的是stdout,而不是stderr!要抑制进入stderr的某些版本和调试信息,请将
-q
添加到命令行

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


解析输入文件、读取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。我使用的是windows,因此无法使用grep和tee命令重定向stderr@user1864948:在Windows上,您可以使用
findstr“%%绑定”而不是grep
。您可以使用普通重定向来代替
tee
1>info.txt
 %%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