2016-10-25 13 views
0

私の製品は、組み込みのAndroidを使用した産業用計測器です。機器は、あらかじめ選択されたネットワークプリンタまたはUSBプリンタに結果を印刷する必要があります。機器のオペレータは、標準のAndroidプリンタインターフェイスに負担をかけることはできず、クラウド印刷は受け入れられません。私は、この状況は、Android搭載の製品(POSサーマルプリンタなど)でかなり一般的だと思うでしょう。組み込みのAndroidからUSBまたはあらかじめ選択されたネットワークプリンタに印刷

ネットワーク上で使用可能なプリンタを見つけてIPアドレスとポート番号を返すコードがあります。 ANSIテキストをプリンタに送信します。ただし、Unicode文字は正しく印刷されません。他のいくつかのANSI以外の文字も印刷されます(ヨーロッパの文字の一部)。私はこれがデフォルトの "シンボルセット"のためだと信じています。

私はPCLまたはIPPを使用してプリンタを制御することを期待しています。 "@PCL"で始まるすべてのテキストがプレーンテキストとして出力されます。 ESCで始まるすべてのテキストは印刷されませんが、私はそのようなコマンドが処理されているとは思わないでしょう。

「ウェブ」を検索すると、この質問が数回尋ねられましたが、よく答えられません。

私のSocket/InputStream/BufferedReaderの使用に何か問題があるかどうかは疑問です。

誰もこの用途のためのソリューションを設計しましたか?

final char ESC = 0x1b; 
final String UEL = ESC + "%-12345X"; 
final String CRLF = "\r\n"; 
Socket socket = new Socket(printer.getIpAddr(), 9100); 
InputStream inputStream = socket.getInputStream(); 
DataOutputStream oStream = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); 
write(oStream, UEL + "@PJL" + "\r\n"); 
write(oStream, "@PJL COMMENT some comments" + CRLF); 
write(oStream, "@PJL ECHO RRE" + CRLF); 
write(oStream, UEL + "\r\n"); 
oStream.flush(); 

BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); 
int count = bufferedInputStream.available(); 

ローカル 'write'メソッドは、Java StringからUTF-8でバイト配列を作成し、バイトをストリームに書き込みます。これらの文字の場合、UTF-8はANSI

答えて

0

です。まず、プリンタがPJLとPCLを使用していますか? 特殊なプリンタには独自の言語があります。

第2に、 あなたのPJLに余分な改行があると思います。 最初のPJLコマンドには、PJLエスケープの改行がないようです。

HP PJLリファレンスマニュアルのサンプルPJL。

 
%–[email protected] COMMENT *Start Job* 
@PJL JOB NAME = "Sample Job #1" 
@PJL SET COPIES = 3 
@PJL SET RET = OFF 
@PJL ENTER LANGUAGE = PCL 
E. . . . PCL job . . . .E 
~ 
%–[email protected] 
@PJL EOJ 
%–12345X 

PJL reference

関連する問題