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() を出力しようとしました。これでプリンターは正常に印刷されますが、アクセント付きの文字も機能しないため、いくつかのコマンドが実行されず、レイアウトが乱雑になり、文字セットが間違っているように見えます