2

我正在尝试使用 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

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

4

1 回答 1

0

好的,这里有几个问题;

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

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

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

所以:gs file1.pdf file2.pdf

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

于 2016-10-18T07:59:23.403 回答