Epson LX-300 II ドット マトリックス プリンターで水平方向の印刷位置を設定するのに問題があります。水平方向の印刷位置を設定するコマンドが機能しない場合があります。
これは、印刷可能なデータを事前に印刷された紙のフォームの適切な列に揃えるために必要です。
次のコードがあるとします。
// row 1
escp.setAbsoluteHorizontalPosition(1);
escp.print("Equipment");
escp.setAbsoluteHorizontalPosition(10);
escp.print("Serial");
escp.setAbsoluteHorizontalPosition(13);
escp.print("Remarks");
// row 2
escp.lineFeed();
escp.setAbsoluteHorizontalPosition(1);
escp.print("Equipment");
escp.setAbsoluteHorizontalPosition(10);
escp.print("Serial");
escp.setAbsoluteHorizontalPosition(13);
escp.print("Remarks");
これは期待される出力です:
Equipment Serial Remarks
Equipment Serial Remarks
ただし、これは実際の印刷出力です。
EquipmentSerial Remarks
EquipmentSerial Remarks
「Serial」が正しい位置に印刷されない理由がわかりません。
これを理解するために、「x」を 1cm 間隔で 1 行に出力するテスト プログラムを作成しました。
テスト プログラムのサンプル コードを次に示します。
ESCPrinter escp = new ESCPrinter(sharedPrinterName, false);
if((escp.initialize()) == false) {
return;
}
escp.select10CPI();
escp.set8LPI();
escp.setCharacterSet(ESCPrinter.USA);
for(int x = 1; x < 15; x++) {
escp.setAbsoluteHorizontalPosition(x);
escp.print("x");
}
escp.formFeed();
escp.close();
期待される出力:
x x x x x x x x x x x x x x
実際の出力:
x x x x xxxxxx x x x x
これはEpson ESC/P Reference Manualです。これは、set8LPI() メソッドを実装するために少し変更したプリンター コマンドの送信に使用しているサードパーティ コードです。
リファレンス マニュアルでは、絶対水平印刷位置を設定するコマンドは C-31 にあります。
私はこれを数日間自分で理解しようとしましたが、解決策を見つけることに近づいていません.
追加情報
テスト データを 0.0cm から 19.8cm の位置まで 0.2cm 間隔で改行して印刷する別のテスト プログラムを作成しました。
印刷したテスト データは、指定した絶対水平位置でもあります (識別しやすくするため)。
正確な印刷出力を示すことは実際的ではないため、できる限り説明します。
水平位置を 5.4 まで 0.0 に設定すると、出力は次のようになります。
0.0
0.2
0.3
0.4
.
.
.
--------> 5.4
その後、10.8cm まで絶対水平位置を 5.6cm に設定しても無視されます。プリンターは、用紙の一番左の部分にのみ印刷します。
「絶対水平位置の設定」コマンドは、11.0cm から 16.2cm まで再び機能します。16.4cmから19.8cmまでまた無視。
上でリンクした ESC/P リファレンス マニュアルを理解しているので、指定された位置が右マージンを超えている場合、プリンターはこのコマンドを無視します。他には何も指定されていません。
明らかに、私の値はすべてマージン内です。
では、これはプリンターのハードウェアの問題でしょうか?
--> ハードウェアの問題ではありません。別のプリンターを使用しても同じ結果が得られました。
アップデート
絶対水平位置を設定するコマンドが与えられた場合: ESC $ nl nh
nh および nl パラメータを直接入力する別のテスト プログラムを作成しました。
nl 値が 127 を超えると、このコマンドが無視されることに気付きました。
リファレンス マニュアルでは nl の最大値が 255 であることが示されているため、これは驚くべきことです。
この結果は、水平位置をセンチメートル単位で入力した最初のテスト プログラムと一致しています。無視されるコマンドの対応する nh 値と nl 値にセンチメートルを変換すると、結果の nl 値は 127 より大きくなります。