我使用此代码将文本文件打印到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命令代码,但我不知道如何将它们发送到打印机。 任何人都可以写一个例子吗?
谢谢。
答案 0 :(得分: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;
无论如何,我的建议是使用tComPort组件而不是直接使用Writeln。使用tComPort可以处理打印机的返回值,以防出现“End Paper”,“Printer OffLine”等错误。
答案 1 :(得分:0)
你必须像这样发送一个ESC / POS序列
cut命令的定义:
//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