私はposプリンター(Epson TM-U220D)で紙をプログラムで供給しようとしています。私が抱えている問題は、ドキュメントの最後の行が印刷されず、次のドキュメントの最初の行として印刷されることです。「ESC|flF」コマンドを送信する .NET 用の POS を試しました。また、シリアル ポートを使用して生の esc/pos コマンドを送信しようとしましたが、機能しません。何か案は?
4 に答える
遅かれ早かれ完全なESC/POS Application Programming Guide
. 私は数年前に私の EPSON ディーラーからコピーを入手しました。それまでの間、Google で次のリンクを見つけましFAQ for ESC/POS
た:
https://web.archive.org/web/20111229102746/http://postechgroup.com/updata/support/drivers/EPSON/FAQ_ESCPOS.pdf
あなたの場合、LF
制御コマンドは印刷バッファー内のデータを印刷し、現在の行間隔に基づいて 1 行送ります。
ASCII: LF
Hex: 0A
Decimal: 10
プリンターが LPT1 上にある場合は、DOS にシェルを実行し、CMD.EXE または COMMAND.COM に、この BASIC 式に相当する C# を指定します。
"ECHO " & Chr(12) & ">LPT1"
それか、出力テキストに Chr(12) を追加します。
紙を切っていますか?用紙をカットする場合は、カッターの位置がプリントヘッドより高くなります。したがって、カット コマンドを送信する前に、複数の行をフィードする必要があります。たとえば、5 つの改行 (LF -> Chr(10)) で文字列をフォーマットし、それらを送信してから、カット コマンドを送信できるはずです。
Epson EScPOS のドキュメントには、用紙を正しい位置で送り、カットする GS V コマンドがあります。
ブーストが言うように、プリンターポートにフォームフィード/ FF / ascii 12を取得する必要があります。C または C++ で、プリンターをファイルとして開いた場合、これは次のようになります。
fprintf(printerfile,"%c",12);
これらのプリンターでは、キャリッジ リターンが書き込まれるまで出力バッファーが実際に処理/フラッシュされないという問題が発生することがあります。ストリームを手動でフラッシュすることもできます。したがって、次を使用します
fprintf(printerfile,"%c%c",12,13);
fflush(printerfile);
シリアル プリンタなどのデバイスに出力するときに犯しやすい間違いは、通信と印刷がメイン アプリケーションと非同期で行われることです。したがって、印刷が終了した直後にプリンタ ポートを閉じないことが重要です。これにより、最終的な出力バッファが失われたり破損したりする可能性があります。
(申し訳ありませんが、これは .NET ではなく C です。私は移行していない C++ のベテランの 1 人です)
編集:私の投稿でalexandrlsのコメントを読んで、私はこれを間違っています。ページの長さを正しく設定していないか、デフォルトが正しくないために、不要なフォーム フィードを取得しているように思えます。これを克服するには、Epson コマンドのESC C nグループを確認してください。