如何从命令行直接将 PDF 或 Postscript 文件打印到打印机

如何从命令行直接将 PDF 或 Postscript 文件打印到打印机

我能够从 Inkscape 顺利打印到配置了 CUPS 的网络打印机。我想直接从 shell 命令行执行相同的操作,如下所示https://unix.stackexchange.com/a/12002/21372答案。但是当我在 Ubuntu 系统上尝试这样做时,在我使用 Inkscape 将 SVG 文件转换为 PDF 或 Postscript 后,将其发送到lpr打印机 (Xerox 6180MFP) 的前面板上会出现以下错误:

我的前面板错误的照片

我尝试使用的命令是:

inkscape --without-gui --export-pdf=test_file.pdf test_file.svg
pdftops test_file.pdf test_file.ps
lpr -P Xerox-6180MFP-D -l test_file.ps

我需要对我的 CUPS 配置做什么才能启用它?Inkscape 在后台执行了哪些操作才能成功打印到打印机,而我无法从命令行执行这些操作lpr

作为参考,下面是我当前的 CUPS 配置文件的要点:https://gist.github.com/bgoodr/6f8b47df40244fed6290a6a199e72c52

输出lpstat -t

scheduler is running
no system default destination
device for Xerox-6180MFP-D: socket://192.168.1.20
device for Xerox-6180MFP-D/double-sided: socket://192.168.1.20
device for Xerox-6180MFP-D/single-sided: socket://192.168.1.20
Xerox-6180MFP-D accepting requests since Sat 04 Mar 2017 05:36:44 PM PST
Xerox-6180MFP-D/double-sided accepting requests since Sat 04 Mar 2017 05:36:44 PM PST
Xerox-6180MFP-D/single-sided accepting requests since Sat 04 Mar 2017 05:36:44 PM PST
printer Xerox-6180MFP-D is idle.  enabled since Sat 04 Mar 2017 05:36:44 PM PST
printer Xerox-6180MFP-D/double-sided is idle.  enabled since Sat 04 Mar 2017 05:36:44 PM PST
printer Xerox-6180MFP-D/single-sided is idle.  enabled since Sat 04 Mar 2017 05:36:44 PM PST

我的打印机页面的屏幕截图http://localhost:631/printers/Xerox-6180MFP-D

CUPS 页面截图

编辑#1

回应评论如何从命令行直接将 PDF 或 Postscript 文件打印到打印机

下面是我用来运行 lpr 的脚本,带有和不带有该-l选项(下面显示没有该选项的脚本):

cd /tmp
qrencode -v 1 -t svg -o some_small_text.qrcode.svg -l L "some small text"
inkscape --without-gui --export-pdf=some_small_text.qrcode.pdf some_small_text.qrcode.svg
# setsid evince some_small_text.qrcode.pdf >/dev/null 2>&1 &
pdftops some_small_text.qrcode.pdf some_small_text.qrcode.ps
lpr -P Xerox-6180MFP-D some_small_text.qrcode.ps

以下是上述调用 qrencode 生成的 Postscript 文件的要点:

https://gist.github.com/bgoodr/8411fe6815522490857765e3c28eaad8

“加载托盘”错误让我相信我必须为 lpr 命令指定更多内容,或修改某些选项。Inkscape 能够以某种方式从它要求我与之交互的打印对话框中传达其需求,而这正是我希望从命令行复制的lpr

编辑#2

lpr没有选择任何选项,结果如下:

$ echo stuff | lpr
lpr: Error - no default destination available.

编辑#3

我已经部分解决了打印机前面板上“装入托盘 1(MPT) ... 76x127mm”错误从何而来的难题。当我打开 Inkscape GUI 并检查qrencode上面显示的命令生成的 .svg 文件的属性时,我看到:

原始 .svg 文件的文档属性

注意宽度和高度。当我尝试使用 GUI 打印时,我得到了相同的“装入纸盘 1(MPT) ... 76x127mm”错误!因此,我从“页面大小”部分中选择了“US Letter”,然后尝试将其打印到打印机上,一切顺利。

因此,显然发生的事情是,打印机看到这个小的(宽度和高度)PostScript 文件,并假设它需要选择一个 3 x 5 英寸的信封托盘。我根据第 69 页的解释推断http://download.support.xerox.com/pub/docs/6180MFP/userdocs/any-os/en/user_guide_en.pdf其中有:

用户指南 来自 6180MFP 用户指南 第 69 页

所以我离我最初问题的答案更近了一点。我现在只需要一种方法来选择纸张来源或从命令行更改尺寸。我查看了inkscape手册页,不清楚我应该使用哪些选项。或者这可能是 imagemagick/convert 类型的操作。

答案1

这是我必须做的:

cd /tmp
qrencode -v 1 -t svg -o some_small_text.qrcode.svg -l L "some small text"
sed 's%<svg width="[^"]*" height="[^"]*" viewBox="[^"]*"%<svg width="8.5in" height="11in" viewBox="0 0 203.94463 263.92834"%g' < some_small_text.qrcode.svg > some_small_text.qrcode.us-letter.svg
inkscape --without-gui --export-pdf=some_small_text.qrcode.us-letter.pdf some_small_text.qrcode.us-letter.svg
lpr -P Xerox-6180MFP-D some_small_text.qrcode.us-letter.pdf

关键是我必须更改元素的widthheightviewBox属性svg,以匹配 Inkscape 在选择 US Letter 时所做的操作。 所用的值对viewBox我来说仍然是个谜。一旦我这样做了,生成的 PDF 在发送到打印机时就能让打印机满意。

这不是我想要的,因为在这种方法中,我必须使用sed来修改属性。我宁愿找到一种方法来使用 Inkscape 直接在 svg 上执行此操作。我确实看到 Inkscape 有一个-verb选项和一个动词,DialogDocumentProperties称为http://how-to.wikia.com/wiki/How_to_use_Inkscape_in_commandline_mode/List_of_verbs但不清楚如何使用该选项实际选择“美国信函”尺寸。

相关内容