web-dev-qa-db-ja.com

PDFまたはPostscriptファイルをコマンドラインから直接プリンターに印刷する方法

InkscapeからCUPSで構成されたネットワークプリンターに問題なく印刷できます。 https://unix.stackexchange.com/a/12002/21372 によって与えられるように、シェルコマンドラインから同じことを直接したいと思います回答。しかし、Ubuntuシステムでこれを試すと、SVGファイルをInkscapeを使用してPDFまたはPostscriptに変換した後、lprに送信すると、プリンターのフロントパネルに以下のエラーが表示されます(a Xerox 6180MFP):

photo of my front panel error

私が使用しようとしているコマンドは次のとおりです。

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設定を有効にするために何をする必要がありますか? lprコマンドラインから実行できない、Inkscapeが舞台裏でプリンターに正常に印刷するために何をしていますか?

参考のために、ここに私の現在の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のプリンターページのスクリーンショット

screenshot of CUPS page

編集#1

のコメントへの応答で、コマンドラインから直接PDFまたはPostscriptファイルをプリンターに印刷する方法

以下は、-lオプションを使用した場合と使用しない場合の両方でlprを実行するために使用したスクリプトです。

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

プリンタのフロントパネルにある「Load Tray 1(MPT) ... 76x127mm」エラーの原因の謎を部分的に解決しました。 Inkscape GUIを開いて、上記のqrencodeコマンドで生成された.svgファイルのプロパティを調べたところ、次のように表示されました。

Document properties on original .svg file

幅と高さに注意してください。 GUIを使用して印刷しようとすると、同じ「Load Tray 1(MPT) ... 76x127mm」エラーが発生しました。そこで、[ページサイズ]セクションから[US Letter]を選択し、プリンターに印刷しようとしましたが、問題なく機能しました。

そのため、どうやら何が起こっているのかというと、プリンターはこの小さな(幅と高さの)ポストスクリプトファイルを見て、3 x 5インチの封筒トレイを選択する必要があると想定しています。私は http://download.support.xerox.com/pub/docs/6180MFP/userdocs/any-os/en/user_guide_en.pdf

User Guide From 6180MFP User Guide Page 69

だから、私は元の質問の答えに少し近づいています。給紙方法を選択したり、コマンドラインからサイズを変更したりする方法が必要になりました。 inkscapeのmanページを見てきましたが、どのオプションが私と一緒に遊ぶべきかは明らかではありません。または、これはimagemagick/convertタイプの操作です。

4
bgoodr

これは私がしなければならなかったことです:

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

重要なのは、US Letterを選択したときにInkscapeが行うことと一致するように、width要素のheightviewBox、およびsvg属性を変更しなければならなかったことです。 viewBoxに使用される値は、謎のままです。それを行った後、プリンターに送られた結果のPDFはプリンターを満足させました。

このアプローチでは、sedを使用して属性を変更する必要があるため、これはまさに私が望んでいたものではありません。私はむしろInkscapeを使用してsvgでこれを直接行う方法を見つけました。 Inkscapeには-verbオプションとDialogDocumentPropertiesという動詞が http://how-to.wikia.com/wiki/How_to_use_Inkscape_in_commandline_mode/List_of_verbs にありますが、そのオプションを使用して「USレター」サイズを実際に選択する方法は明らかではありません。

1
bgoodr