在服务器模式下使用 Ghostscript 将 PDF 转换为 PNG
Posted
技术标签:
【中文标题】在服务器模式下使用 Ghostscript 将 PDF 转换为 PNG【英文标题】:Using Ghostscript in server mode to convert PDFs to PNGs 【发布时间】:2010-03-11 20:08:41 【问题描述】:虽然我能够像这样将 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 解释器兼容。如果指定了-dJOBSERVER
,则忽略-dNOOUTERSAVE
开关,因为作业服务器总是在保存级别下执行输入 PostScript,尽管 exitserver 运算符可用于从封装的作业中转义并像执行一样执行指定了-dNOOUTERSAVE
。这也要求输入来自标准输入,否则会导致错误
(
Error: /invalidrestore in --restore--
)。示例用法是:
gs ... -dJOBSERVER - < inputfile.ps -or- cat inputfile.ps | gs ... -dJOBSERVER -
注意:
^D
不会导致标准输入上的文件结束操作,因为它可能会在一些依赖 TBCP(标记二进制通信协议)的 PostScript 打印机上导致输出-of-band^D
在流输入数据中发送 EOF 信号。这意味着对标准输入的直接文件操作(例如flushfile
和closefile
)将影响流中^D
之外的数据处理。
这个想法是在进程中运行 ghostscript。该脚本将接收对 pdf 特定页面的请求,并使用 ghostscript 生成指定的图像。我宁愿不要每次都启动一个新的 ghostscript 进程。
【问题讨论】:
您是否尝试过我建议的解决问题的方法? 【参考方案1】:那么你为什么不能简单地使用这样的命令:
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 图像。
【讨论】:
以上是关于在服务器模式下使用 Ghostscript 将 PDF 转换为 PNG的主要内容,如果未能解决你的问题,请参考以下文章
使用 ghostscript 将 Postscript 转换为文本文件
有没有办法在不安装的情况下引用 ghostscript DLL?