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

发布于 2024-08-24 19:01:28 字数 1475 浏览 6 评论 0原文

虽然我能够将 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/~幽灵/doc/svn/Use.htm

<代码>-dJOBSERVER

<块引用> <块引用>

定义 \004 (^D) 以启动一个新的封装作业,用于与通常在作业服务器下运行的 Adob​​e PS 解释器兼容。如果指定了 -dJOBSERVER,则忽略 -dNOOUTERSAVE 开关,因为作业服务器始终在保存级别下执行输入 PostScript,尽管 exitserver 操作员可以用于从封装的作业中转义并执行,就像指定了 -dNOOUTERSAVE 一样。

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

示例用法是:

<代码> gs ... -dJOBSERVER - <输入文件.ps
                -或者-
   猫输入文件.ps | GS ... -dJOBSERVER - 

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

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

while i am able to convert a specific page of a PDF to a PNG like so:

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

i am wondering if i can somehow use ghostscript's JOBSERVER mode to process several conversions without having to incur the cost of starting up ghostscript each time.

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

-dJOBSERVER

Define \004 (^D) to start a new encapsulated job used for compatibility with Adobe PS Interpreters that ordinarily run under a job server. The -dNOOUTERSAVE switch is ignored if -dJOBSERVER is specified since job servers always execute the input PostScript under a save level, although the exitserver operator can be used to escape from the encapsulated job and execute as if the -dNOOUTERSAVE was specified.

This also requires that the input be from stdin, otherwise an error will result (Error: /invalidrestore in --restore--).

Example usage is:

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

Note: The ^D does not result in an end-of-file action on stdin as it may on some PostScript printers that rely on TBCP (Tagged Binary Communication Protocol) to cause an out-of-band ^D to signal EOF in a stream input data. This means that direct file actions on stdin such as flushfile and closefile will affect processing of data beyond the ^D in the stream.

the idea is to run ghostscript in-process. the script would receive a request for a particular page of a pdf and would use ghostscript to generate the specified image. i'd rather not start up a new ghostscript process every time.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

回眸一笑 2024-08-31 19:01:28

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

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 图像。

So why can't you simply use a command like this:

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

This will generate several PNG images from different PDFs in a single go.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文