Linux 管道 ( convert -> pdf2ps -> lp)

5

好的,我可以通过以下方式打印PDF文件:

pdf2ps file.pdf - | lp -s

但现在我想使用convert来合并几个PDF文件,我可以使用以下命令:

convert file1.pdf file2.pdf merged.pdf

这个功能可以将file1.pdffile2.pdf合并成merged.pdf,目标文件名可以用'-'替换。

问题

我该如何将convert命令的输出通过管道传递给pdf2ps,再传递给lp呢?

4个回答

7

convert file1.pdf file2.pdf - | pdf2ps - - | lp -s应该能够完成任务。

这个命令会将 convert 命令的输出发送到 pdf2ps,并将其输出发送到 lp。


这确实有效。然而,我刚刚发现转换工具无法正确合并我的PDF文件。烦死了。所以,我想继续发布我的下一个问题:> - alcohol
1
最终解决方案:pdftk file1.pdf file2.pdf cat output - | pdf2ps - - | lp -s(安装 pdftk 后) - alcohol
@tonio:您似乎没有意识到,无论是convert还是pdf2ps都在后台使用Ghostscript。因此,不要在同一个管道中运行两个不同的包装器来处理相同的Ghostscript,这样会使输入数据必须通过Ghostscript两次(如果它能够正常工作的话),您最好运行单个Ghostscript命令将多个PDF文件转换为一个PostScript文件或数据流... - Kurt Pfeifle

0

您可以像使用文件一样使用 /dev/stdout:

convert file1.pdf file2.pdf /dev/stdout | ...

我使用gs来合并PDF文件,例如:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=/dev/stdout -f ...

0

由于在你的pdf2ps命令后面隐藏着一个运行Ghostscript命令的过程(完成PDF -> PS转换),你也可以直接运行Ghostscript来生成PostScript:

gs -o output.ps      \
   -sDEVICE=ps2write \
    file1.pdf        \
    file2.pdf        \
    file3.pdf ...

请注意,旧版的GS没有包含生成PostScript Level 2的ps2write设备,只有生成更大的PostScript Level 1的pswrite。因此,如果需要,请相应地更改上述参数。
旧版Ghostscript版本还可能需要用更冗长的-dNOPAUSE -dBATCH -sOutputFile=/dev/stdout替换现代缩写-o -。只有新版GS(2006年4月之后的所有版本)才知道-o参数。
现在,要直接将PostScript输出导入lp命令,您需要执行以下操作:
gs -o -              \
   -sDEVICE=ps2write \
    file1.pdf        \
    file2.pdf        \
    file3.pdf ...    \
| lp -s <other-lp-options>

这可能比先运行pdftk要快得多(但这也取决于您的输入文件)。


-1
convert file1.pdf file2.pdf merged.pdf
pdf2ps merged.pdf - | lp -s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接