2016年2月13日土曜日

LibreOfficeの印刷とPDFの印刷ができない

いつからかLibreOfficeとPDFの印刷ができなくなっていた。年賀状を作るときに印刷ができなくなっていることに気づいたが、どうすれば元のように印刷できるようになるか、結構時間をかけて調べても分からず、ずっと原因を探していた。cupsやcnijfilterの再インストールなど試してみたが、改善しなかった。

色々と試した結果、CUPSのpdftops-renderer-defaultを設定することで、印刷ができるようになった。その時の症状と、対策を記事にしておく。環境は、GNOME 3.18.2, cups 2.1.3-1, cups-filters 1.8.1-1, Printer: Canon Pixus MG5130(USB接続), Priter Driver: cnijfilter-mg5200 3.40-11(mg5100としてインストール)。また、ユーザーはsysグループに入っている。

あらかじめインストールされている、関係しそうなパッケージを挙げておく。
cups, cups-filters, libcups, cups-pdf, cups-pk-helper, ghostscript, gsfonts, cnijfilter-mg5200, a2ps, poppler, poppler-data, poppler-glib, system-config-printer, libreoffice-still

印刷の症状
印刷したときの現象
すべての印刷ができなくなったというわけではなく、アプリケーションによって印刷できるものとできないものがあった。印刷できないアプリケーションで印刷を実行すると、印刷のジョブはプリンタまで送信され、プリンタの液晶に「処理中です。しばらくお待ちください...」と表示されるものの、何も印刷せずにプリンタはスタンバイの状態に戻ってしまう。パソコン側にも、印刷ジョブが正常に送信されたポップアップと完了したポップアップが表示される。



CUPSのエラーログを見ても、印刷できていた時と同じエラーが出ているのみ。LogLevelをdebugにしても変わらず。
$ less /var/log/cups/error_log

...
W [11/Feb/2016:23:20:03 +0900] CreateProfile failed: org.freedesktop.ColorManager.AlreadyExists:profile id \'MG5100-Gray..\' already exists
W [11/Feb/2016:23:20:03 +0900] CreateProfile failed: org.freedesktop.ColorManager.AlreadyExists:profile id \'MG5100-RGB..\' already exists

また、Capturing print job dataに従って、エンキューされたファイルをキャプチャしてみたが、問題なくPDFファイルが/var/spool/cups/に格納されており、不具合の原因は分からず。

印刷できるアプリケーション
Firefox、画像ビュアー等からは印刷できた。また、一部のPDFファイル、PostScriptファイルはEvinceから印刷できなかったのだが、そのようなファイルであっても、印刷プレビューアーから開いて印刷を実行すると印刷できたり、Evinceからは印刷できないPDFファイルであってもターミナルからlprで印刷すると、印刷できたりした。
$ lpr PDFファイルのパス
$ echo "Hello, world!" | lpr -p

以下、印刷できないアプリケーションについて、それぞれの症状を書いておく。

LibreOffice
LibreOfficeについては、Calcからの印刷は完全にできず、また、LibreOffice Writerからの印刷は、英数字のみのファイルなら印刷されるものの、日本語がファイルに含まれると印刷できなくなるという状態。年賀状を印刷するのにCalcを使っていたため、宛名面の印刷ができず非常に困った。ただし、Gutenprintをドライバとして使うと、LibreOffice Calcから問題なく印刷できることが分かり、年賀状の宛名面はGutenprintを使って印刷した。

ただし、Gutenprintは画像の印刷は汚く、また、cnijfilterを使っても画像の印刷は画像ビュアーからできることが分かっていたので、文面の画像印刷はプリンタドライバをcnijfilterに戻して印刷を行った。なんとかその場しのぎの方法ではあるが印刷できる状態にはなったものの、色々と不便であった。

LibreOfficeがエラーを出しているか確認しようと、ターミナルから起動して印刷を実行してみたがエラーは出ず。LibreOfficeのログを見るにはdebugバージョンをインストールしないといけないみたいだが、よく分からず。

さらに後日、色々設定を見返しているとLibreOffice Calcからも「プリンタ言語の種類」を「PostScript」に設定することで問題なく印刷することができることがわかった。しかしながら、その他印刷できないアプリケーションからは、依然として印刷ができない状態であった。プリンタの言語の種類は、LibreOffice Calcの「印刷」→全般のタブで「プロパティ」→デバイスのタブで「プリンター言語の種類」の項目から選ぶことができる。



Evince(ドキュメントビューアー)
Evinceからは、PDFファイルが印刷できない状態であった。すべてのPDFが印刷できないわけではなく、印刷できるPDFファイルと印刷できないPDFファイルがあった。ファイルのプロパティを調べてみると、フォントが全て埋め込まれているファイルでは印刷できるが、埋め込まれていないフォントを使用しているファイルは印刷できなかった。

フォントの状況は、Evinceの「プロパティ」→フォントのタブから確認できる。一方、PostScriptファイルはすべて印刷できなかった。



gedit
geditからテキストファイルを印刷しようとしても、印刷できず。

cnijfilterを使って印刷できるようにする方法
pdftops-renderer-defaultの設定
これだけ色々書いてきたが、印刷できるよにする方法は簡単で、ターミナルから以下のコマンドを打つだけ。
lpadmin -p プリンタの名前 -o pdftops-renderer-default=pdftops

プリンタの名前は、次のコマンドで調べることができる。ここでは、MG5100がプリンタの名前になる。
$ lpstat -a
MG5100 accepting requests since 2016年02月13日 15時37分24秒

lpadmin -oで指定できる項目はlpoptionsから確認できるらしいが、pdftops-renderer-defaultという項目は出てこない。
$ lpoptions -l
Resolution/Output Resolution: *600dpi
ColorModel/Color Model: *rgb
PageSize/Page Size: Custom.WIDTHxHEIGHT Letter Letter.bl Legal A5 *A4 A4.bl B5 4X6 
4X6.bl 4X8 4X8.bl 5X7 5X7.bl 8X10 8X10.bl l l.bl 2l 2l.bl postcard postcard.bl postdbl 
envelop10p envelopdlp envj4p envj6p businesscard businesscard.bl wide wide.bl
MediaType/Media Type: *plain glossygold proplatinum semigloss glossypaper matte 
highres postcardaddress ijpostcard glossypost postcard tshirt envelope otherphoto
InputSlot/Paper Source: *auto asf cassette continuous
CNExtension/Amount of Extension: 0 1 *2 3
Duplex/Automatic Duplex Printing: *None DuplexNoTumble DuplexTumble

また、何もオプションを付けないと現在の設定を表示する。pdftops-renderer-default=pdftopsの設定をすると、pdftops-renderer=pdftopsとなる。
$ lpoptions 
copies=1 device-uri=usb://Canon/MG5100%20series?serial=33F707&interface=1 finishings=3 
job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=0 
number-up=1 pdftops-renderer=pdftops printer-commands=AutoConfigure,Clean,PrintSelfTestPage 
printer-info='Canon MG5100 series' printer-is-accepting-jobs=true printer-is-shared=true 
printer-location printer-make-and-model='Canon MG5100 series Ver.3.40' printer-state=3 
printer-state-change-time=1455350436 printer-state-reasons=none printer-type=8556572 
printer-uri-supported=ipp://localhost/printers/MG5100

pdftops-renderer=pdftopsの設定を削除したいときは、lpadmin -Rで削除できる。
$ lpadmin -p MG5100 -R pdftops-renderer-default



参考:
[1]PDF as Standard Print Job Format
[2]LinuxPrinting.org: CUPS Filtering Architecture
[3]PDF printing issues [SOLVED]
[4]Man page of lpadmin
[5]Popplerについてちょっとだけ
[6]Ghostscript についてちょっとだけ
[7]PDF印刷パスがびみょいのはなぜ?

スポンサーリンク

スポンサーリンク

0 件のコメント:

コメントを投稿