Linux 管道(转换 -> pdf2ps -> lp)
Posted
技术标签:
【中文标题】Linux 管道(转换 -> pdf2ps -> lp)【英文标题】:Linux piping ( convert -> pdf2ps -> lp) 【发布时间】:2011-01-31 05:52:27 【问题描述】:好的,所以我可以打印一个 PDF:
pdf2ps file.pdf - | lp -s
但现在我想使用convert
来合并几个 PDF 文件,我可以这样做:
convert file1.pdf file2.pdf merged.pdf
将file1.pdf和file2.pdf合并成merged.pdf,target可以替换为'-'。
问题
我如何通过管道转换成pdf2ps
,然后再转换成lp
?
【问题讨论】:
【参考方案1】:由于隐藏在您的pdf2ps
命令后面有一个 Ghostscript 命令正在运行(完成 PDF -> PS 转换),您也可以直接运行 Ghostscript 来生成 PostScript:
gs -o output.ps \
-sDEVICE=ps2write \
file1.pdf \
file2.pdf \
file3.pdf ...
请注意,较旧的 GS 版本不包括 ps2write
设备(生成 PostScript Level 2),而仅包括 pswrite
(生成更大的 PostScript Level 1)。因此,如果需要,请相应地更改上述参数。
较旧的 Ghostscript 版本可能还需要将现代缩写 -o -
替换为更详细的 -dNOPAUSE -dBATCH -sOutputFile=/dev/stdout
。只有较新的 GS 版本(都在 2006 年 4 月之后)知道 -o
参数。
现在,要将 PostScript 输出直接通过管道传输到 lp
命令,您必须这样做:
gs -o - \
-sDEVICE=ps2write \
file1.pdf \
file2.pdf \
file3.pdf ... \
| lp -s <other-lp-options>
这可能比先运行pdftk
快得多(但这也取决于您的输入文件)。
【讨论】:
【参考方案2】:您可以像使用文件一样使用 /dev/stdout:
convert file1.pdf file2.pdf /dev/stdout | ...
我使用 gs 来合并 pdf,例如:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=/dev/stdout -f ...
【讨论】:
【参考方案3】:convert file1.pdf file2.pdf - | pdf2ps - - | lp -s
应该做的工作。
您将转换命令的输出发送到 psf2ps,后者又将其输出提供给 lp。
【讨论】:
这确实有效。但是,我刚刚发现 convert 没有正确合并我的 pdf 文件。啊。内容为空。所以,在发布我的下一个问题时,我猜:> 最终解决方案:pdftk file1.pdf file2.pdf cat output - | pdf2ps - - | lp -s
(安装pdftk后)
@tonio:您似乎没有意识到convert
和pdf2ps
在后台都使用了 Ghostscript。因此,不是在管道中围绕同一个 Ghostscript 运行两个不同的包装器,这会使输入数据必须通过 Ghostscript 两次(如果它工作 AT ALL),你最好运行一个 Ghostscript 命令将多个 PDF 文件转换为一个 PostScript 文件或数据流......【参考方案4】:
convert file1.pdf file2.pdf merged.pdf
pdf2ps merged.pdf - | lp -s
【讨论】:
以上是关于Linux 管道(转换 -> pdf2ps -> lp)的主要内容,如果未能解决你的问题,请参考以下文章