4

私がこれまでに持っているのは、次のコードです:

 FileInputStream fin =new FileInputStream(filename);
 DocFlavor df = DocFlavor.INPUT_STREAM.AUTOSENSE;                    
 Doc d = new SimpleDoc(fin, df, null);   
 PrintService P = PrintServiceLookup.lookupDefaultPrintService();

  if (P != null) {              
     DocPrintJob job = P.createPrintJob();  
     job.print(d, null);  
            }
    fin.close;

コードは正常に動作していますが、ファイルにコマンドが含まれている場合、プリンターはコマンドを解釈せず、ファイルの正確な文字列コンテンツを印刷し続けます。では、エプソンのレシートプリンターにコマンドを送る方法は?

4

3 に答える 3

6

コマンドは ESC/POS 形式ではなく直接送信する必要がある場合があることがわかっていますが、Java コードでコードを 16 進数に解釈し、ファイルまたは文字列から投稿する方法でプリンターに送信する必要があります。例として、エプソンのレシートプリンターを次のように初期化する代わりに:

  PRINT #1, CHR$(&H1B);"@";

レシートプリンターで用紙をカットするには、コードは次のようになります。

  PRINT #1, CHR$(&H1D);"V";CHR$(1);

これが私にとってどのように機能するかです。

    char[] initEP = new char[]{0x1b, '@'};
    char[] cutP = new char[]{0x1d,'V',1};
    String Ptxt=  new String(initEP)+ " text data \n \n \n"+ new String(cutP);

それ以外の

    Doc d = new SimpleDoc(new FileInputStream(filename), df, null);  

使用する

    InputStream pis = new ByteArrayInputStream(Ptxt.getBytes());
    Doc d = new SimpleDoc(pis, df, null);

ただし、コマンド形式としてコードを送信する方法かもしれませんが、これまでのところ必死にそれを行うことができませんでした. Javaから実行できるかどうかはわかりません。

于 2012-12-09T01:39:15.800 に答える
1

Linux (Ubuntu 12) を実行している場合、この問題は、プリンター ドライバーが汎用 + テキストの場合に発生します。ジェネリック + ロー キューを選択すると、プリンターは ESC POS デバイスのように動作します。

于 2013-08-11T11:13:46.303 に答える
1

最後のステップは、入力ファイルに真の ASCII 値を使用してプリンター コマンドを挿入することです。たとえば、エスケープ文字は ASCII 値 0x1B です。これは、16 進エディタや Notepad++ の文字パネル ([編集] メニューの下) などの任意の ASCII 値を挿入できるエディタを使用するか、ファイルから読み取られた後にプリンタに送信されるデータをプログラムで変更することによって実行できます。

于 2012-12-07T17:04:42.853 に答える