我能够从 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
编辑#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 文件的属性时,我看到:
注意宽度和高度。当我尝试使用 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其中有:
所以我离我最初问题的答案更近了一点。我现在只需要一种方法来选择纸张来源或从命令行更改尺寸。我查看了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
关键是我必须更改元素的width
、height
和viewBox
属性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但不清楚如何使用该选项实际选择“美国信函”尺寸。