1

このコードを使用して、テキスト ファイルを POS プリンター (EPSON) に印刷します。

   AssignFile(prnfile, 'file.txt');
   Reset(prnfile, 1);
   AssignFile(port, 'COM3');
   Rewrite(port, 1);
   repeat
     BlockRead(prnfile, buffer, SizeOf(buffer), Read);
     BlockWrite(port, buffer, Read);
   until EOF(prnfile) or (Read <> SizeOf(buffer));
     CloseFile(prnfile);
     CloseFile(port);

テキストは印刷されていますが、レシートをカットする必要があります。EPSON のコマンド コードを持っていますが、プリンターに送信する方法がわかりません。誰でも例を書くことができますか?

ありがとうございました。

4

2 に答える 2

1

私は多くのことを試しましたが、最終的に動作するこのコードを書きました:

procedure Cut();
 var epsonprn : System.Text;
begin
 try
   AssignFile(epsonprn,'COM3');// the name of printer port, can be a network share
   Rewrite(epsonprn);
   Write(epsonprn,#29#86#66#0);//cut sequence
 finally
   CloseFile(epsonprn);
 end;
end;

したがって、解決策は次のとおりです。

procedure TForm1.Button1Click(Sender: TObject);
 var prnfile,port:System.Text;
 var buffer:String;
begin
  try
    AssignFile(prnfile, 'c:\file.txt');
    Reset(prnfile);
    AssignFile(port, 'COM3');
    Rewrite(port);

    while not eof(prnfile) do
      begin
        Readln(prnfile, buffer);
        Writeln(port, buffer);
      end;

   finally
     CloseFile(port);
     CloseFile(prnfile);
   end;

   cut();
end;

とにかく、Writeln を直接使用する代わりに、tComPort コンポーネントを使用することをお勧めします。tComPort を使用すると、「End Paper」、「Printer OffLine」などのエラーが発生した場合に、プリンターからの戻り値を処理できます。

于 2015-07-27T19:38:58.923 に答える
0

このような ESC/POS シーケンスを送信する必要があります

カットコマンドの定義:

//ASCII   GS V  m
//Hex     1D 42 m
//Decimal 29 66 m


var cut:String;
begin  
  cut:=Chr(29)+'V'+Chr(66)+Chr(0);
// send this sequence direct to com after the text file
end;

完全な esc/pos コードはこちら

于 2015-07-26T15:15:28.480 に答える