2010-02-02
RPDL 用 cups-raster フィルタを書いた
Ricoh IPSiO SP6120 を Linux から使うシリーズ。
前回は Ricoh RPDL IV Laser Printer Foomatic ドライバの出力をフィルタするスクリプトを書いて両面印刷に対応させたりしました。
この場合の印刷フローは下記のようになっています。
- ドキュメント =[cairo]=> PostScript =[Ghostscript rpdl driver]=> RPDL native
(実際には CUPS フロントエンドがデータをうけとって、foomatic-RIP フィルタを介して Ghostscript を呼び出したりしてるんですが、そのへんのフローは無視します)
で、Ghostscript rpdl driver の吐く RPDL native データ形式をスクリプトで加工した、ということになってます。
今回作成した cups-raster フィルタを使った場合の印刷フローは下記のようになります。
- ドキュメント =[cairo]=> PostScript =[Ghostscript cups driver]=> CUPS raster =[cups-raster filter]=> RPDL native
(実際には pstoraster フィルタコマンドによって Ghostscript cups driver が呼び出されたりしてるんですが、そのへんのフローは無視します)
上記のフローに比べて1レイヤ増えていることがわかります。ですが、CUPS raster 形式という可搬性のあるフォーマットを経由している*1ので、プリンタドライバを開発する上ではこちらのほうが楽なのです。しかも標準入出力を読み書きするスタンドアロンなプログラムを書けばいいので、デバッグも(そこそこ)楽です。
ともあれ、今回開発したドライバを下記においておきます。
LIPS & ESC/Page & NPDL & RPDL 対応 Ghostscript デバイスドライバからエスケープシーケンスやロジックなどを抜き出した*2ので、倣って GPL v2 としてあります。
以下注意点など。
- さまざまな機種で入念にテストしたわけではないので、おかしな出力となり紙を浪費したり、紙詰まりをおこすことがありえます
- どこに原因があるのかわかりませんが、ページ全体が真っ白になったり一部しか印字されないことがありました
- Ubuntu 9.10 の cairo による PostScript 出力がおかしいのか
- Ubuntu 9.10 の Ghostscript による PostScript 解釈がおかしいのか
- Ubuntu 9.10 の Ghostscript cups driver がおかしいのか、不明
- cups-raster フィルタに画像データがわたってくる時点でブランクになってたりした
- 該当する PostScript ファイルを Ghostscript で画面に表示してもブランクになってた
- でも通常の gs-rpdl ドライバだと出力されたりするんですよね、なぜか
- landscape なデータを 2-up で portrait 出力する場合、なぜかページ順が上下逆になってしまいます
おまけ(リコーオフィシャルのドライバがあった)
と、この文章を書く上で「Ghostscript RPDL」で検索かけたら、リコーの提供している Ghostscript RPDL ドライバ*3がありました。最初っからそのキーワードで検索かければよかった。
Ubuntu 8.04 LTS用ですが、GPL なのでソースも公開されてます。このソースをもとに今回のコードをアップデートする作業がはじまるお*4。
