2016-10-17 48 views
1

我想创建一个单行的Linux命令来结合两个PDF文件 - 这是从URL下载 - 使用Ghostscript。但是,我不想创建任何临时文件(一切都应该在内存中完成)。管道多个输入到Ghostscript

以下命令看起来不起作用(我尝试通过进程替换实现此目的)。

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的命令,也许有一种方法来等待这样的事情发生。

回答

0

确定这里有几个问题;

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

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

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

所以: GS file1.pdf file2.pdf

你正在尝试做是行不通的,在任何情况下不会阻止创建两个PDF文件的,它只是Ghostscript的在你看不到它们的地方为你创造它们。