Delphi调用打印机的ZPL指令来打印数据

来源:互联网 发布:网络课程毛笔字 编辑:程序博客网 时间:2024/05/29 04:53

一、如果是并口打印机这样,可直接以打印机为本地文件操作。 代码如下:

procedure TDSaleBillDetailForm.YRButton1Click(Sender: TObject);
var
  F :Textfile;

begin
 
  AssignFile(F, 'LPT1');
  try
    ReWrite(F);
    Write(F, chr(27) + chr(64));       //初始化打印头
    Writeln(F, '    歡迎光臨                          ');
    Writeln(F, '* * * * * * * * * * * * * * ');  
    //......
  finally
    Closefile(F);
  end;
end;

 

二、如果是USB接口连接打印机的话有两种方法:

  1、在CMD窗口下将USB虚拟成LPT

     第一步,配置网卡的IP地址,指定一个固定IP与子网掩码;     第二步,共享USB接口的条码打印机,记得起一个简单易记的名字,这个是打印机共享名, 我的打印机起名叫GP5860;    第三步,映射出刚才共享的打印机到LPT1端口,在命令行端口运行NET USE LPT1: //计算机名或IP/打印机名 /Persistent:YES,回车;(把计算机名或IP和打印机名改成你自己的)       例: NET USE LPT1 //127.0.0.1/GP5860 /PERSISTENT:YES    说明: NET USE  列出所有的映射内容
NET USE LPT1 /DELETE 删除前面的映射定义  
2、使用斑马打印机windows驱动来实现
uses winspool
...............

procedure WriteRawStringToPrinter(PrinterName, S: string);
var
Handle: THandle;
N: DWord;
DocInfo1: TDocInfo1;
begin
if not OpenPrinter(PChar(PrinterName), Handle, nil) then raise Exception.Create('打开打印机失败!');

with DocInfo1 do
begin
pDocName := PChar('Test Doc');
pOutputFile := nil;
pDatatype := 'RAW';
end;

StartDocPrinter(Handle, 1, @DocInfo1);
StartPagePrinter(Handle);
WritePrinter(Handle, PChar(S), Length(S), N);
EndPagePrinter(Handle);
EndDocPrinter(Handle);
ClosePrinter(Handle);
end;


//调用以上面的过程
procedure bbtnPOSPrintClick(Sender: TObject);
var
ZPL: string;
sList: TStringList;
begin
sList := TStringList.Create;
try
sList.Add(chr(27) + chr(64)); //初始化打印头
sList.Add(' 歡迎光臨 ');
sList.Add(' * * * * * * * * * * * * * *');
sList.Add('');
sList.Add('');
sList.Add('');
sList.Add('');

ZPL := sList.Text;
WriteRawStringToPrinter('GP-5860III', ZPL); //我的打GP-5860III
finally
sList.Free;
end;

end;
原创粉丝点击