「EPSON」タグアーカイブ

Ubuntu 14.04とEPSONレーザープリンターについて

[orca-users:13972]の内容について、弊社ではEPSONレーザーをメイン機として使っているお客様はいないものの、社内にはEPSON LP-9100があり、同様の現象が発生したため調査しました。
cupsd.confのLogLevelをdebugに変更して/var/log/cups/error_logを12.04の時と比較したり、gdbでgsをステップ実行したりして調査した結果です。

12.04より左マージンが大きくなる問題

14.04で印刷するとなぜか左マージンが大きくなり、右端の印字が切れます。これはCUPSの途中で走るPDF→PSへの変換処理がGhostscriptで行われると発生するようです。/var/log/cups/error_logでいうと

Running command line for gs: gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=ps2write -sOUTPUTFILE=%stdout -dLanguageLevel=3 -r600 -dCompressFonts=false -dNoT3CCITT -dNOINTERPOLATE -c 'save pop' -f /tmp/foomatic-1Emzj

の部分で、このps2writeデバイスで出力されたPSファイルをeplaser-jpで処理すると印字がズレるようです。
(ただしこの変換済みのPSファイルをgvなどで見てもずれているわけではないので、eplaser-jpとの組み合わせで発生するようです)
対処として、

lpadmin -p プリンタ名 -o pdftops-renderer-default=pdftops

を設定すると、このPDF→PSへの変換処理が、poppler-utilsのpdftopsを使うようになり、

/var/log/cups/error_log
 Running command line for pdftops: pdftops -level3 -origpagesizes -nocenter -r 600 /tmp/foomatic-gEB0Zx -

きちんとした位置に印字されるようになります。

QRコードが白黒反転したり、薬剤情報の写真がない部分が黒塗りになる

この不具合は、もともとあったGhostscriptのgdevescv.cドライバーの1ビット画像の処理の抜けではないかと考えています。
(12.04版ORCAでQRコードの部分は1ビットイメージではないので再現しません)

1ビットイメージを描画する際はescv_copy_monoで行っているようですが、ビット1が、透明・または白色をあらわすというパラメータが渡ってきた場合、(one == gx_no_color_index、または、one == vdev->whiteのとき)、ESC/Page側では1が黒で固定されている(?)ため、0と1を反転させてからプリンタ側に送信しなくてはなりませんが、反転処理が行われていないようです。(コメントにはビット反転、という部分がありましたが処理は空)。
ビットを反転して送信する以下のパッチを作成し、gsをビルドすると正しい印字となりました。

#あとで気づきましたが、gdevescv.cを改造する話に同じようなパッチがありました。10年以上前から存在する不具合なんですね・・。

全てのソースが公開されているので(今回ESC/Pageの仕様書もEPSONからダウンロードしました)、調べようと思えばなんとかなるものですね。今回、ちょっとだけCUPSからプリンタまでの処理の流れについて知識が増えた気がします。