如何从 Delphi 向 POS 打印机发送控制命令
How to send control commands to POS printer from Delphi
我使用此代码将文本文件打印到 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 命令代码,但我不知道如何将它们发送到打印机。
谁能写个例子?
谢谢。
你必须像这样发送一个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代码here
我已经尝试了很多,最后我写出了这段有效的代码:
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;
无论如何,我的建议是使用 tComPort 组件而不是直接使用 Writeln。如果出现 "End Paper"、"Printer OffLine" 等错误,您可以使用 tComPort 处理来自打印机的 return 值。
我使用此代码将文本文件打印到 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 命令代码,但我不知道如何将它们发送到打印机。 谁能写个例子?
谢谢。
你必须像这样发送一个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代码here
我已经尝试了很多,最后我写出了这段有效的代码:
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;
无论如何,我的建议是使用 tComPort 组件而不是直接使用 Writeln。如果出现 "End Paper"、"Printer OffLine" 等错误,您可以使用 tComPort 处理来自打印机的 return 值。