繁体   English   中英

将多个输入插入到Ghostscript中

[英]Piping multiple inputs into Ghostscript

我正在尝试创建一个单行Linux命令,以使用Ghostscript组合两个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命令,也许有一种方法可以等待这种情况发生。

好,这里有几个问题。

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

其次,您不能避免使用临时文件。 如果您通过stdin将PDF文件通过管道传输到Ghostscript,则它只是创建一个临时文件并将整个文件存储在其中。 这是必需的,因为PDF文件需要随机访问才能进行解释。

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

因此:gs file1.pdf file2.pdf

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM