【问题标题】:Piping multiple inputs into Ghostscript将多个输入管道传输到 Ghostscript
【发布时间】:2016-10-17 16:44:29
【问题描述】:

我正在尝试使用 Ghostscript 创建一个单行 Linux 命令来组合两个 PDF 文件(从 URL 下载)。但是,我不想创建任何临时文件(一切都应该在内存中完成)。

以下命令似乎不起作用(我尝试通过进程替换来实现)。

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=combined.pdf <(curl http://example.com/one.pdf) <(curl http://example.com/two.pdf)

当我运行这个命令时,它给了我下面的错误。

**** Warning:  An error occurred while reading an XREF table.
**** The file has been damaged.  This may have been caused
**** by a problem while converting or transfering the file.
**** Ghostscript will attempt to recover the data.
Error: /ioerror in --run--
Current allocation mode is local
Last OS error: Illegal seek
GPL Ghostscript 9.18: Unrecoverable error, exit code 1

我相信发生的事情是 Ghostscript 命令在两个输入 PDF 有机会完成下载之前运行,也许有办法等待这种情况发生。

【问题讨论】:

    标签: linux curl ghostscript piping process-substitution


    【解决方案1】:

    好的,这里有几个问题;

    首先,Ghostscript 和 pdfwrite 设备不会合并 PDF 文件。输入被完全解释,转换为图形基元,并发送到设备。渲染设备使用图形库将图元渲染为位图,矢量设备创建图元的高级表示并以适当的语言将其写入输出。所以重要的是要注意输出文件的内容与输入文件的内容无关。只有视觉结果在渲染时应该是相同的。

    其次,您无法避免临时文件。如果您通过标准输入将 PDF 文件传送到 Ghostscript,那么它只会创建一个临时文件并将整个文件存储在其中。这是必要的,因为 PDF 文件需要随机访问才能被解释。

    最后,您不能在命令行上两次从 stdin 进行管道传输。要处理两个文件,您要么需要编写自己的 Ghostscript 接口并使用流接口发送数据,要么将它们都放在命令行中。

    所以: gs 文件1.pdf 文件2.pdf

    您尝试做的事情根本行不通,无论如何也不会阻止创建这两个 PDF 文件,只是 Ghostscript 会在您看不到它们的地方为您创建它们。

    【讨论】:

      猜你喜欢
      • 2020-07-21
      • 2019-05-17
      • 2016-02-13
      • 1970-01-01
      • 2014-07-11
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多