Delphi斑马打印机条码打印程序
1.打印界面:
2.代码如下(附斑马打印机基本指令): unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, strutils, ExtCtrls,JPEG;
type
TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit1: TEdit; cbx1: TComboBox;
1 / 21
Edit2: TEdit; cbx2: TComboBox; Memo1: TMemo; Button1: TButton; Button2: TButton;
ComboBox1: TComboBox; Label6: TLabel; Button3: TButton; GroupBox6: TGroupBox; Label7: TLabel; cbxJMX: TComboBox; Edit3: TEdit; Button4: TButton; Image1: TImage; Button5: TButton;
procedure Button1Click(Sender:
2 / 21
TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end;
functionGETFONTHEX(chnstr: string;fontname: string;orient:
3 / 21
integer;height: integer; width: integer; bold: integer; italic: integer; hexbuf: string):
integer; stdcall;external 'fnthex 32.dll';
function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string;
functionGetQRCode(constr: PWideChar;Path: PChar):
4 / 21
Integer;stdcall;external'GenQRCode.dll'; var
Form1: TForm1; tupian: TJPEGImage; implementation {$R *.dfm}
function PrtChnStr(x, y: integer; fontname: string; height, xmf, ymf: integer; chnstr: string): string; var buf, ret: string; count:
5 / 21
integer; begin result : = '';
setlength(buf, 21 * 1024); count :
= GETFONTHEX(chnstr, fontname, 0, height, 0, 1, 0, buf); if count > 0 then begin ret :
= Copy(buf, 1, count); result:
=ret+'^FO'+inttostr(x)+','+inttostr(y)+'^XGOUTSTR01,'+inttostr(xmf) + ',' + inttostr(ymf) + '^FS';
end; end;
//--------------------生成指令--------------------------------------------- procedure TForm
6 / 21
1.Button1Click(Sender: TObject); var
prtstr, code ,sl: string; begin if edit 3.Text='' then begin
showmessage('打印数量不能为空'); edit 3.SetFocus ; Edit 3.SelectAll; exit; end; try
7 / 21
StrToFloat(Edit 3.Text); except Edit 3.SetFocus; Edit 3.SelectAll;
showmessage('打印数量不正确,请重新录入!'); Exit; end; if cbx
1.Text = 'Code 11' then code : = '^B1' else if cbx
1.Text = 'Code 39' then code :
8 / 21
= '^B3' else if cbx
1.Text = 'Code 49' then code : = '^B4' else if cbx
1.Text = 'Code 93' then code : = '^BA' else if cbx
1.Text = 'Code 128' then code : = '^BC' else if cbx
1.Text = 'EAN-8' then code : = '^B8';
9 / 21
if (cbxJMX.Text<>'A') and (cbxJMX.Text<>'B') then cbxJMX.Text: ='A' ; prtstr :
= '^XA^JM'+cbxJMX.Text+'^IA6^XZ^FS^XA^FS^BY2,3^LH20,23^FS';//^JM设定打印分辨率(点/毫米)
A、B;^BY设置条码宽度和高度;^LH打印机开始位置 prtstr :
= prtstr + '^FO60,10' + code + ',' + '70^FD' + trim(Edit
1.Text) + '^FS';//^FO20,30表示ZEBAR这行字距标签纸边的位置; ^FD定义打印内容指令prtstr :
= prtstr + PrtChnStr(80, 100, pchar(cbx 2.Text), 14, 1, 2, pchar(Edit 2.Text));//字体和文字信息 prtstr :
= prtstr + '^PQ'+edit 3.Text+'^FS'; //^PQ打印份数 prtstr :
10 / 21
= prtstr + '^PRC^FS^XZ'; //^PRC打印速度^FS-数据域分隔命令(换行)prtstr : = prtstr + '^XA^EG^FS^XZ'; //^EG删除所有打印机上的存储档 Memo 1.lines.clear; Memo
1.lines.Add(prtstr); end;
//---------------------------------打印---------------------------- procedure TForm 1.Button2Click(Sender: TObject); var prtstr: string; filehandle: integer; THandle;
11 / 21
begin prtstr : = Memo 1.Text;
try//---选择打印端口COM 1、LPT1
= CreateFile(PChar(ComboBox
1.Text), GENERIC_WRITE, 0, nil,OPEN_EXISTING, 0, 0); finally end; end;
procedure TForm 1.Button3Click(Sender: TObject); begin Memo 1.Lines.Clear;
12 / 21
end;
//----生成二维条码-------------------- procedure TForm 1.Button4Click(Sender: TObject); var s:
WideString ; Path : string ; lpt: textfile; begin s : = Edit 2.Text ; Image
13 / 21
1.Picture.Assign(nil); Path :
= ExtractFilePath(ParamStr (0))+'tmp.bmp';
GetQRCode(PWideChar(s),PChar(path)); Image
1.Picture.Bitmap.LoadFromFile(Path); end;
//------------打印二维条码------------------------ procedure TForm 1.Button5Click(Sender: TObject); var prtstr: string; filehandle: integer;
14 / 21
THandle; begin prtstr :
='^XA^BQN,5,5^FO30,60^FDMM,A'+ Trim(edit 1.Text) +'^FS^XZ'; //^BQN打印二维码 {prtstr :
= prtstr + PrtChnStr(80, 100, pchar(cbx 2.Text), 14, 1, 2, pchar(Edit 2.Text)); prtstr :
= prtstr + '^PQ1^FS'; prtstr :
= prtstr + '^PRC^FS^XZ'; prtstr :
= prtstr + '^XA^EG^FS^XZ'; } try//---选择打印端口COM 1、LPT1
15 / 21
= CreateFile(PChar(ComboBox
1.Text), GENERIC_WRITE, 0, nil,OPEN_EXISTING, 0, 0); finally end; end; end.
3.斑马打印机基本指令
ZPL指令及条码选择整理(斑马S4M) ^XA
^LH50,20^FO10,50^BY2, 2.0,200^BCC^FD>890^FS ^CW1,E: MSUNG
24.FNT^CI17^FO40,270^A1N,20,20^F8^FD测试文本^FS ^XZ
ZPL指令是区分大小写的。 ^XA和^XZ是开始和结束标记。
16 / 21
这些ZPL指令可以参考下面的标记,主要解释一下^BC是128码,128码分为A子集、B子集、C子集,不同的子集打印的条码长度不同,打印leng%2=0(就是打印的数字个数是双数)的数字最好使用128码C子集(条码短),>5就是由默认的B子集转成C子集,如果打印的是单数1>,1是使用B子集打印,然后>5转成C子集。
如果使用程序打印的时候,编码方式应该使用UTF-8,否则打不出中文。 1.
格式指令以^开始 控制指令以~开始 2.
^XA ^XZ标签开始、标签结束 ^FD ^FS字段数据开始、结束 例:
^FDThis is an example.^FS 3.
^XA开始标签格式
^LH0,0原点位置(Label Home) ^FO203,203文本位置(Field Origin) ^ABN,30,30字体类型与大小
17 / 21
^FDExample^FS打印的正文字符串(Field Data) ^XZ结束标签格式 4.
各个域之间以^FS进行分隔 5.
^XA开始标签格式 ^LH0,0原始位置 ^FO203,203条形码位置 ^BY3,
2.4,50条形码系统设定[预置] ^B3N,Y,,YCode 39条形码 ^FDABC123^FS条形码数据 ^XZ结束标签格式
6.一般为^FO定义位置,然后定义字体或定义条码格式,然后定义内容^FS结束(分隔),即^FO与^FS之间的是一段内容(域)的显示。
7.xx那个 ^XA ^LH20,20
18 / 21
^FO20,10^AF^FDZEBRA^FS ^FO20,60
^B3,,40,, //40为条码高度,为主要参数,其他默认(Barcode 39) ^FDAA001^FS
//^PQnum,,,PQnum,,num, ^XZ
采用默认参数,后面的逗号可以省略 8.序列号^SNv,n,z v: 起始值n:
increment/decrement z: 是否显示前置的零 9. ^XA ^LH20,20
^FO20,10^AF^FDZEBRA^FS ^FO20,60
19 / 21
^B3,,40 ^FDAA001^FS ^FO20,200^AF
^SN001,1,Y^FS//1,决定了序列号递增值为1 ^PQ4,,2//2决定了序列号的重复数,4决定总页数 ^XZ
打印效果为序列号, 001两页002两页,共四页 10. ^XA ^LH0,0 ^FO20,20 ^BY2, 2.0,35
//第一个选项设置窄条窄空整体的宽度,可以理解为x方向的放大系数 //第三个选项设置条码高度 ^BC//128码
^FD1>^FS//默认使用B子集,>5转到C子集
20 / 21
^XZ
21 / 21
因篇幅问题不能全部显示,请点此查看更多更全内容