2022年2月1日火曜日

Linuxでラインプリンタを使う設定&印刷データ作成方法

 AS400で動いているシステムをLinux&Javaでリプレースする案件で、引き続きラインプリンタを使いたいとのことで、動くようにしてみた。

こんな記事書いて助かる人いるかどうかわからないけど一応書いとく。


使用するプリンタはリコーの Info Print 5400モデルF06 で、ドキュメントはネットで入手可能

調べたところAS400とはtelnet5250とかいうIBMローカルなプロトコルで通信しているが、lprもサポートしている。切り替えは実機いじってコンソールで設定変更。日本語コードは一応自動判別するらしいが、同様にSJISへ切替可能。

当然Linux用のドライバなんてない。で、どうやって設定・制御するかと言うと、結論から言ってしまえは、

ドライバはRow Printerにして、印字データはテキストのみ。制御コードはデータ中に含める

ということになる。


CUPSで新規登録する場合は、

LPD/LPR ホストまたはプリンター

・接続先:lpd://プリンタのIPアドレス/lp1

 このプリンタの場合、lp1〜lp4までキューがあって、lp1は改行\r\n、印字終了時改ページしない

・メーカー:Raw

・モデル:Raw Queue(en)

でおk。


印字開始位置は用紙によって手動でセッテイングを行うので、印字開始位置制御はしなくていいとして、

・初期化(コンソール使って設定した状態に戻す)

・1インチあたりの文字数、行数

・用紙サイズ

・改ページ

はデータの中に含める。


例えば、1インチあたり6行半角6文字で、用紙サイズ11インチに

「はろー、\r\nわーるど。」

と印字する場合、印刷するデータはユニコードにすると以下のようになる。


\u001B\u007E\u0001\u0000 (初期化)

\u001B\u007E\u0003\u0000\u0001\u003C (行ピッチ6lpi)

\u001B\u007E\u0002\u0000\u0001\u003C (文字ピッチ6cpi)

\u001B\u007E\u0004\u0000\u0002\u0001\u0042 (用紙長、\u0042は1ページ66行)

はろー、

\000D\000A (改行)

わーるど。

\000C (改ページ)


Java等のプログラムで上記のような印字データファイル作成して、あとはlprで流し込んでやればよい。