将ImageMagic转换脚本转换为Ghostscript脚本

时间:2016-05-13 10:00:32

标签: pdf imagemagick ghostscript imagemagick-convert

我有一个ImageMagick命令,用于将PDF的第一页转换为图像。

convert file.pdf[0] -background white -flatten -resize 173 \
     -crop 173X229+0+0 -gravity NorthWest +repage test.jpg

这里我需要173px宽度的图像,第一页的最大高度为229px。 对于较大的文件(约9MB),转换大约需要2分钟。

当我尝试使用以下内容使用gs进行测试时,脚本只花了几分钟时间:

gs -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 -o test4.jpg file.pdf

我需要帮助将图像大小调整为173px,然后将高度裁剪为229px。任何人都可以帮助这个gs脚本吗?

1 个答案:

答案 0 :(得分:1)

在第2086行附近的/ghostpdl/Resource/Init/pdf_main.ps是执行缩放的例程pdf_PDF2PS_matrix。在2094行左右,我们看到:

currentpagedevice /.HWMargins get aload pop
currentpagedevice /PageSize get aload pop
% Adjust PageSize and .HWMargins for the page portrait/landscape orientation
2 copy gt   % PageSize_is_landscape
7 index aload pop 3 -1 roll sub 3 1 roll exch sub exch
10 index /Rotate pget not { 0 } if cvi 90 idiv 1 and 0 ne { exch } if
gt  % Box_is_landscape
ne {
  1 index 0 translate 90 rotate % add in a rotation

这将检查已根据PDF文件中所请求媒体的方向设置的媒体的方向,如果它们不相同,则将PDF文件旋转90度。

您可以将其更改为:

currentpagedevice /.HWMargins get aload pop
currentpagedevice /PageSize get aload pop
% Adjust PageSize and .HWMargins for the page portrait/landscape orientation
2 copy gt   % PageSize_is_landscape
7 index aload pop 3 -1 roll sub 3 1 roll exch sub exch
10 index /Rotate pget not { 0 } if cvi 90 idiv 1 and 0 ne { exch } if
gt  % Box_is_landscape
ne pop false {
  1 index 0 translate 90 rotate % add in a rotation

将阻止执行if子句(通过从堆栈弹出布尔值并将其替换为'false'),因此不会发生旋转。

对我来说,这不会旋转你的风景页面。

如何使用它取决于Ghostscript的构建方式,这可能取决于Linux发行版的软件包维护者。

如果资源内置在ROM文件系统中,那么您需要找到存储在磁盘上的副本,修改文件,然后重建Ghostscript以便将修改后的文件内置到ROM文件系统中,或者使用-I切换告诉Ghostscript忽略ROM文件系统并从磁盘上的某个位置读取资源。

如果Ghostscript不是为了使用ROM文件系统而构建的,那么您需要在磁盘上找到资源,然后修改该文件。或者您可以再次使用-I开关告诉Ghostscript使用一组已修改的资源。

最好总体上使用-I开关,因为这样您可以保留正常资源,并且只在您想要执行此任务时才使用此修改后的代码。