1

Windowsを実行しているマシンに接続されたサーマルUSBプリンターに、1つのWebサービスから1つずつ受信したコマンドのリストを印刷しようとしています。問題は、受信したすべてのデータで単一の PrintJob を作成する必要があり、受信したすべての byte[] のジョブではないことです。これが私のコードです:

...//communicated with webserver and received data using "message" variable

PrintService defaultPrintService = PrintServiceLookup.lookupDefaultPrintService();

System.out.println("Default printer: " + defaultPrintService.getName());

if (defaultPrintService != null) {
    sendMessage("connected"); //send message to the server to start receiving data to print
    DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;

        while (!message.contentEquals("done")) {
                try {
                    message = (String) in.readObject();

                    if (!message.contentEquals("done")) {
                        Doc doc = new SimpleDoc(message.getBytes(), flavor, null);
                        DocPrintJob job = defaultPrintService.createPrintJob();
                        job.print(doc, null);
                    }
                } catch (Exception e) {        
                    // Handle exception
                    e.printStackTrace();
        }
}

そこで何が起こるかというと、ウィンドウは受信したメッセージごとに 1 つの印刷ジョブを作成し (最初からわかっていました)、数行を印刷するのに数分かかります。

もう 1 つの問題は、ネットワーク経由でプリンターに直接印刷すると、正常に印刷されることです。USB経由では、テキストではなく、改行や用紙カットなどのコマンドを印刷するだけです(ネットワーク経由のように)。

私は何が欠けていますか?

ありがとうございます!

アップデート

受信したすべての文字列を 1 つの文字列に連結し、その文字列から getBytes() を出力しようとしました。これでプリンターは正常に印刷されますが、アクセント付きの文字も機能しないため、いくつかのコマンドが実行されず、レイアウトが乱雑になり、文字セットが間違っているように見えます

4

0 に答える 0