USB経由で接続されたPOSプリンターを使用するWindows 7上のJavaでプログラムを開発しています。印刷スプールを使用した一般的な PrintJob から始めましたが、十分ではありません。ドライバーよりも多くのことをコントロールする必要があります。
だから私は自分で書いたすべてのコマンドで生データを送信しています。ここでのnorbi771の回答のおかげで、私はこれを達成しましたPrint Zebra ZM400 using Java . ネットワーク上でプリンターを共有し、生データを \localhost\myprinter に送信する OutputStream を作成しています。
これはうまく機能します。InputStreamを開いてプリンターのステータスを読み取ろうとすると、問題が発生します。このモデルには、ステータスを要求するコマンドがいくつかあり、プリンターはすぐに応答します。マニュアルは次のように述べています。
ステータスは、データ シーケンスを受信するたびに送信されます。プリンターは現在のステータスを 1 バイトのデータで送信します。プリンターは、ホストコンピューターがデータを受信できるかどうかを確認せずにステータスを送信します。
次に、生データを送信できます (同じスキーマと URL を使用して印刷しています) が、ステータスを読み取ろうとすると FileNotFoundException が発生します。 java.io.FileNotFoundException: \localhost\myprinter, (指定されたファイルが見つかりません) . 入力用ではなく、出力用に見つけることができるのはどうしてですか?
プリンターから送信された情報を読み取る方法を知っている人はいますか? これまでの私のコードは次のとおりです。これを5秒ごとにスレッドで実行しているため、「準備ができていない/接続されていない」プリンターではありません。InputStream を作成する前にスリープしようとしましたが、何も機能しません。それを読むために接続する他の方法はありますか?
FileOutputStream os; FileInputStream is;
PrintStream ps = null; InputStreamReader reader = null;
char[] askStatus = {0x10, 0x04, 0x02};
String port = "\\\\localhost\\myprinter";
try {
os = new FileOutputStream(port);
ps = new PrintStream(os);
ps.print(askStatus);
ps.flush();
//Everything fine until here
//sleep(1000);
is = new FileInputStream(port); //This line throws the Exception
reader = new InputStreamReader(is);
if (reader.ready()) {
int status = reader.read();
System.out.println("Status: " + Integer.toBinaryString(status));
}
} catch (Ex...) {...}