配置GhostScript以旋转90度以上的页面输出(PDF => PNG)

时间:2014-01-24 22:26:16

标签: rotation ghostscript

我正在尝试使用以下内容从PDF输入旋转GhostScript的输出:

gs -dSAFER -dBATCH -dNOPAUSE -r200 -sDEVICE=pngmono \
 -dAutoRotatePages=/None -sOutputFile=output.png -c 10 rotate -f input.pdf

它生成输出文件而不进行任何旋转(相对于所需的10度旋转)。任何想法在这里出了什么问题?

1 个答案:

答案 0 :(得分:3)

首先; AutoRotatePages仅为pdfwrite系列设备定义,其他设备不对其执行任何操作。因此,将它指定给pngmono设备将无效。

其次,PDF解释器在处理PDF文件时重置图形状态。这样做是因为,为了执行页面拟合,将PageSize设置为PDF文件的MediaBox以及其他一些东西,它会调用setpagedevice。 setpagedevice的一个隐含操作是调用initgraphics,它会重置CTM。

基本上,当您开始处理PDF文件时,您不能依赖PostScript图形状态,以便在处理PDF时对图形状态产生任何影响。

如果你真的想这样做,你必须在pdfshowpage_setpage的末尾修改gs / Resource / Init / pdf_main.ps:

  pop currentdict end setpagedevice
} bind def

您需要在setpagedevice之后插入您的轮播。最好的方法是使用PostScript参数,例如UserRotation。然后你可以这样做:

  pop currentdict end setpagedevice
  /UserRotation where {
    /UserRotation get rotate
  } if
} bind def

用-dUserRotation = 10

调用GS

对于在将资源内置到ROM文件系统中的系统上运行的人,您需要修改磁盘上的文件,然后告诉GS使用-I开关使用修改后的Resources(-I / ghostpdl / gs) /资源/初始化)。对于任何试图在Windows中使用它的人来说,首先需要获取资源(它们目前不作为Windows二进制版本的一部分提供),这可能意味着下载Ghostscript源。