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.pdffile2.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:您似乎没有意识到convertpdf2ps 在后台都使用了 Ghostscript。因此,不是在管道中围绕同一个 Ghostscript 运行两个不同的包装器,这会使输入数据必须通过 Ghostscript 两次(如果它工作 AT ALL),你最好运行一个 Ghostscript 命令将多个 PDF 文件转换为一个 PostScript 文件或数据流......【参考方案4】:
convert file1.pdf file2.pdf merged.pdf
pdf2ps merged.pdf - | lp -s

【讨论】:

以上是关于Linux 管道(转换 -> pdf2ps -> lp)的主要内容,如果未能解决你的问题,请参考以下文章

Linux xargs

Linux-xargs命令

Linux命令学习之xargs命令

linux xargs命令

Linux特殊符号浅谈

Linux命令-xargs