Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

ドットプリンタを制御する方法を模索中

人力検索してみました。やっべマジわかんね。

チェーンストア伝票や送り状のような複写式の帳票に動的に デー.. - 人力検索はてな

現在自社で組んでる僕の業務アプリがドットプリンタ印字に対応しておらず、注文在庫管理と伝票印刷で二重入力をしなくてはいけないのが辛い。これが注文~伝票まで連動できればネ申とのオファーが来たので、ドットプリンタで印字するためにはどうしたらいいか調べる必要が出てきました。レーザープリンタの場合は複写式の伝票を印字することは出来ないので、ドットプリンタを使うしかない。

で、当然のごとく注文内容や顧客コードなどを指定された複写式伝票に動的に打ち込まないといけない。弊社は沖データのこのドットプリンタを利用している。

MICROLINE 8480SU2-R | ドットインパクトプリンタ | OKIデータ

ドットプリンタに対する印字命令は、どうもメーカー準拠のバイナリコードを送りつけないとダメらしい。この理解が間違っていると前提から覆っちゃうんだけど、多分合ってると思う。エプソンが開発した「ESC/P」というのが最も普遍的らしく、ドットプリンタはシリアルだから行単位で印字命令を出す必要があるとのことだ。沖データのヤツもESC/Pに準拠しているっぽい。

と、いうことは、

  • プリンタにソケット開いて接続する
  • ESC/Pのバイナリコードを(JavaだとPrintStream?)を介して流し込む
  • Streamを閉じる

ってJavaプログラムを書けば、もしかしてイケるんじゃねって思い始めた。制御さえ出来れば、あとは制御コード一覧表みたいなのを沖データから貰ってきっとページ送りとかも出来るに違いない。

VBの場合はPrinterDocumentとかを介して流し込むらしいのだが、このようなナイスライブラリが用意されている模様。ぺー送りは必須なのでシェアウェア。1500円なり。値上がりする前に買っておきたい気もする。

ジャーナル印刷ライブラリ ESC/P用(シェアウエア版)

今後のTodoとしては

  • Javaの標準印刷APIを使って、制御コードを送り込んで印字が出来るのかどうか
  • VBのオブジェクト or 上記ツールを使って印字が出来るのかどうか

という所か。印字が出来れば、次は印字位置の調整だ。

ウン十万は辛いけど、10万以下でESC/Pでドットプリンタ制御が出来るミドルウェアがあればそれを買ってしまったほうが早いんだろうけど、原理が知りたいのでもうちょい頑張りたい。

追記(2011/05/06 19:36)

・・・・・大丈夫、もっと簡単に印刷できた。Java PrintService APIを利用すれば印字できた。

Java Graphicsを使ってかんたんプリント(1/3):CodeZine

こちらの連載の通りやれば印字はできたので、後はレイアウト、ページ送りの実装が出来れば。

ちなみに現在はc#のPrintDocumentで印刷できることを確認した。Windowsのドライバがあれば何でも出来る。