在服务器模式下使用Ghostscript将PDF转换为PNG

时间:2010-03-11 20:08:41

标签: ghostscript

虽然我能够将PDF的特定页面转换为PNG,如下所示:

gs \
  -dSAFER \
  -dBATCH \
  -dNOPAUSE \
  -sDEVICE=png16m \
  -dGraphicsAlphaBits=4 \
  -sOutputFile=gymnastics-20.png \
  -dFirstPage=20 \
  -dLastPage=20 \
   gymnastics.pdf

我想知道我是否可以某种方式使用ghostscript的JOBSERVER模式处理多次转换,而不必每次都产生启动ghostscript的费用。

来自:http://pages.cs.wisc.edu/~ghost/doc/svn/Use.htm

  

-dJOBSERVER

     
    
      

定义\004 (^D)以启动一个新的封装作业,用于与通常在作业服务器下运行的Adobe PS解释程序兼容。如果指定了-dNOOUTERSAVE,则会忽略-dJOBSERVER开关,因为作业服务器总是在保存级别下执行输入PostScript,尽管可以使用exitserver运算符来逃避封装的作业并执行就像指定了-dNOOUTERSAVE一样。

             

这还要求输入来自stdin,否则将导致错误Error: /invalidrestore in --restore--)。

             

示例用法是:

   gs ... -dJOBSERVER - < inputfile.ps
                -or-
   cat inputfile.ps | gs ... -dJOBSERVER - 
             

注意: ^D不会导致stdin上的文件结束操作,因为它可能会依赖于某些依赖于TBCP(标记二进制通信协议)的PostScript打印机带外^D以在流输入数据中发信号通知EOF。这意味着stdin上的直接文件操作(例如flushfileclosefile)将影响流中^D之外的数据处理。

    
  

这个想法是在进程中运行ghostscript。该脚本将收到对pdf的特定页面的请求,并将使用ghostscript生成指定的图像。我不想每次都启动一个新的ghostscript进程。

1 个答案:

答案 0 :(得分:2)

那你为什么不能简单地使用这样的命令:

gs \
  -sDEVICE=png16m \
  -dGraphicsAlphaBits=4 \
  -o pngimages_%03d.png \
   \
  -dFirstPage=20 \
  -dLastPage=20 \
   gymnastics.pdf
   \
  -dFirstPage=3 \
  -dLastPage=3 \
   sports.pdf
   \
  -dFirstPage=33 \
  -dLastPage=33 \
   athletics.pdf
   \
  -dFirstPage=4 \
  -dLastPage=4 \
   lazyness.pdf

这将一次性生成来自不同PDF的几个PNG图像。