2023年12月17日发(作者:烟瑞彩)
Zebra条码打印机编程命令
条码打印机是一种专业的打印设备,其打印实现方式与普通的激光、喷墨或针式打印机有所不同,世界各大条码打印设备厂商生产的打印机都采用了各自不同的打印语言以实现其打印,如Zebra系列的ZPL,Eltron的EPL,Datamax的DPL等,与普通打印方式相比,采用打印语言的优点在于速度快,精度高,但由于没有统一的标准打印语言,使得用户在使用不同机器时会产生一定的麻烦,好在各种打印语言的语法比较类似,上手也是比较简单的。
目前的条码打印主要采用专业的商用条码打印软件,使用方便、简单,功能强大,且提供了对各类型条码打印设备的接口,适用于需经常变换打印格式、内容的用户,如专业印刷厂商等,但此类软件的价格也较昂贵。对于一些采用了企业管理系统的用户,其打印标签的格式通常已较固定,因此可在软件系统中嵌入条码打印部分。一般来说,可采用以下几种方式:直接使用条码打印机的条码语言编写程序;采用各种专业控件提供商编制的条码控件;使用一些高级条码打印软件,如CodeSoft、LabelView提供的ActiveX技术等。这几种方式在方便性、精确性及经济性等方面各有其优缺点,用户可根据需要自行选择,这里,主要对第一种方式给出较为详细的使用方法。
ZPLII是Zebra系列打印机的打印语言,在ZPL的基础上做了一定的更新,其语法通俗易懂,在这里对其条码、文字、图形打印部分给予一一介绍。
基本标签示例:
^XA ‘标签格式开始命令
^LH30,30 ‘Label Home position设置标签起始参考点坐标为30,30,默认为0,0
^FO20,10^AD^FDEXAMPLE^FS ‘^FO20,10-设置数据域起始坐标,距参考点20,10
^AD-定字体为D(内部字体)
^FD-据域开始命令
EXAMPLE实际打印内容
^FS-据域分隔命令
^FO20,60^B3^FDAAA001^FS ‘^B3-选择条码类型为39码
^XZ ‘标签格式结束命令
由上例可见,ZPLII的命令使用还是相当简单的。
下表中,对ZPLII一些常用命令做出解释
设数数
命令名
释义及用法
^XA
标签格式开始命令,每张标签打印都需以此命令开头
^LHx,y
设置标签起始参考点坐标,不使用此命令时默认为0,0
x:x轴坐标(0-9999),y:y轴坐标(0-9999)
注:计量单位为点(dot)
200dpi机器,8点=1mm
300dpi机器,12点=1mm
^LTx
标签内容上下(Y轴)位置整体移动
x:移动的数值,范围:-120 - +120点
^LSa
标签内容左右(X轴)位置整体移动
a:移动的数值,范围:-9999 - +9999点
^FOx,y
设置数据域(包括文字、条码、图形等)起始坐标(左上角)
^FDa
定义打印数据字符,a:打印内容
^FS
数据域分隔命令
^Af,o,h,w
打印文字格式定义
f:字体,默认为0,选择范围:A-Z,0-9(均为打印机内部字体,非TrueType字体)
o:文字方向,N=普通,R=旋转90度,I=旋转180度,
B=旋转270度
h:字符高度,范围:10-1500点
w:字符宽度,范围:10-1500点
^BYw,r,h
设定条码默认参数
w:条宽,缺省为2点,选择范围:1-10点
r:条空比率,缺省为3.0,选择范围:2.0-3.0
h:条码高度
^B3o,e,h,f,g
打印39码
o:条码方向
e:Mod-43校验位,N=No(默认),Y=Yes
h:条码高度,范围:1-9999点
f:是否打印字符行,Y=Yes(默认),N=No
g:字符行位置,N:条码下方,Y:条码上方
^BCo,h,f,g,e,m
打印128码
e:UCC校验位,N=No(默认),Y=Yes
m:模式,一般设为A(自动选择)或忽略不计
^PRp
打印速率
p:速度——2-8(或A-E)=2英寸/秒-8英寸/秒
^PQq
打印数量
q:总数量,选择范围:1-99999999
^GBw,h,t
打印方框
w:方框宽度,h:方框宽度,t:线宽
~DGd:o.x,t,w,DATA
下载图形
t:图形大小,计算方法为:x ×(点/毫米)×(y×(点/毫米)
8
x:图形宽度(毫米),y:图形高度(毫米)
w:每行字节数,计算方法为x ×(点/毫米)
8
DATA:图形的ASCII16进制字符
^XGd:o.x,x,y
调用图形进行打印
d:存储图形的设备(Ram/FlashRam等)
o.x:图形文件名,默认扩展名为GRF
x:x轴缩放系数
y:y轴缩放系数
^IDd:o.x
删除图形
注:以上命令中如果不填写某些参数,则会使用默认参数,速度控制,位置调整等控制命令需置于标签内容设置命令之前,也可忽略这些控制命令,直接在打印机上调节。
以上是一些ZPLII的主要打印用命令,一些较不常用的打印及控制命令未做说明,用户也最好不要轻易使用,以免造成机器软硬件设置的混乱。
使用ZPLII编写好一个标签格式文件后,可使用DOS命令COPY将其发送至打印机端口进行打印,在编写系统软件时当然也可以采用这种方法,但其效率很低。
下面以VB为例,介绍如何在VB中使用ZPLII打印标签。
Private Sub CmdPrint_Click()
Open "LPT1" For Output As #1
Print #1, "^XA"
Print #1, "^LH30,30"
Print #1, "^FO20,10^AD^FDEXAMPLE^FS "
Print #1, "^FO20,60^B3^FDAAA001^FS "
Print #1, "^PQ1,0,0,Y"
Print #1, "^XZ"
Close #1
End Sub
上述方法是将ZPLII命令直接发往LPT1并行打印端口。
在编程中,中文字符的打印应用较多,而如果在程序中直接写入中文字符,打印出的结果会是乱码,针对这种情况,我们可以采用一个动态链接库,使用其中的函数将采用了各种TrueType字体的中文(包括任何语种的文字)转换成16进制码,使得打印机以图形打印方式打印出文字。具体实现方式如下,同样以VB为例。
Private Declare Function GETFONTHEX Lib "" (ByVal chnstr$,
ByVal fontname$, ByVal chnname$, ByVal orient%, ByVal height%, ByVal
width%, ByVal bold%, ByVal italic%, ByVal hexbuf$) As Integer
Private Sub Command1_Click()
Dim nCount As Integer
Dim cBuf As String * 21000
nCount = GETFONTHEX("中文字符打印测试", "宋体", "chnstr01", 0, 30,
0, 1, 0, cBuf)
Open "LPT1" For Output As #1
Print #1, Mid(cBuf, 1, nCount) Print #1, "^XA" Print #1, "^PRB^FS" Print #1, "^BY3,3.0^FS" Print #1, "^FT30,190^BEN,70,Y,N^FD2^FS" Print #1, "^FO30,15^XGchnstr01,1,1^FS" Print #1, "^PQ1,0,0,Y" Print #1, "^XZ" Print #1, "^XA" Print #1, "^IDchnstr01^FS" Print #1, "^XZ"
Close #1
End Sub
VC示例
Void function
writeZebra()
{
FILE * fhandle;
fhandle=fopen("","w+");
fputs("^XAr",fhandle);
fputs("^LH30,30r",fhandle);
fputs("^FO20,10^AD^FDEXAMPLE^FSr",fhandle);
fputs("^FO20,60^B3^FDAAA001^FSr",fhandle);
fputs("^PQ1,0,0,Yr",fhandle);
fputs("^XZr",fhandle);
fputs("n",fhandle);
fclose(fhandle);
::CopyFile("","LPT1",TRUE);
return;
}
DELPHI示例
……
function
GETFONTHEX(outStr,lfFaceName,outstrname:Pchar;lfOrientation,lfHeight,lfWidth,lfBold,lfItalic:Integer;hexBuf:PCHAR):HINST;stdcall;
……
implementation
function GETFONTHEX;external '';
…….
procedure ntClick(Sender: TObject);
var
lpt:textfile;
cbuf:pchar;
str:string;
begin
assignFile(lpt,'LPT1');
rewrite(lpt);
str:=’测试文字’;
//以下调用转换函数将TrueType文字(中文)转换为图形并发送至打印机内存中,参数说明见附录
cbuf:=strAlloc(21000);
GETFONTHEX(pchar(str),'黑体','strtest',0,32,0,0,0,cbuf);
writeln(lpt,cbuf);
strdispose(cbuf);
writeln(lpt,'^XA');
writeln(lpt,'^FO10,240^A0N,60,60^FDTEST^FS’); //使用打印机内部字体0打印文字“TEST”
writeln(lpt,'^FO10,10^XGstrtest,1,1^FS');//打印TrueType文字(中文)
writeln(lpt,'^FO10,100^BCN,100,Y,N,N,A^FD1234567^FS'); //打印128条码,内容为“1234567”,高度为100dots
writeln(lpt,'^PQ1');//打印一张标签
writeln(lpt,'^XZ');
writeln(lpt,'^XA');
writeln(lpt,'^IDstrtest^FS');//清空打印机中的图像缓存
writeln(lpt,'^XZ');
CloseFile(lpt);
end;
附:GETFONTHEX函数参数说明
* 1) LPSTR outStr, // 输出字符串的内容
* 2) LPSTR lfFaceName, // TrueType字体名称
* 3) LPSTR outstrname // 输出字符串的名称
* 4) short int lfOrientation, // 旋转方向: 0,90,180,270
* 5) short int lfHeight, // 字体高度 ,对于200dpi打印机,PC中的12号字在打印机中数值相当于32
* 6) short int lfWidth, // 字体宽度 ,汉字一般设为0,为方块字
* 7) short int lfBold, //字体加粗
* 8) short int lfItalic, // 斜体
* 9) LPSTR hexBuf // 接收转换后图形的缓冲区
2023年12月17日发(作者:烟瑞彩)
Zebra条码打印机编程命令
条码打印机是一种专业的打印设备,其打印实现方式与普通的激光、喷墨或针式打印机有所不同,世界各大条码打印设备厂商生产的打印机都采用了各自不同的打印语言以实现其打印,如Zebra系列的ZPL,Eltron的EPL,Datamax的DPL等,与普通打印方式相比,采用打印语言的优点在于速度快,精度高,但由于没有统一的标准打印语言,使得用户在使用不同机器时会产生一定的麻烦,好在各种打印语言的语法比较类似,上手也是比较简单的。
目前的条码打印主要采用专业的商用条码打印软件,使用方便、简单,功能强大,且提供了对各类型条码打印设备的接口,适用于需经常变换打印格式、内容的用户,如专业印刷厂商等,但此类软件的价格也较昂贵。对于一些采用了企业管理系统的用户,其打印标签的格式通常已较固定,因此可在软件系统中嵌入条码打印部分。一般来说,可采用以下几种方式:直接使用条码打印机的条码语言编写程序;采用各种专业控件提供商编制的条码控件;使用一些高级条码打印软件,如CodeSoft、LabelView提供的ActiveX技术等。这几种方式在方便性、精确性及经济性等方面各有其优缺点,用户可根据需要自行选择,这里,主要对第一种方式给出较为详细的使用方法。
ZPLII是Zebra系列打印机的打印语言,在ZPL的基础上做了一定的更新,其语法通俗易懂,在这里对其条码、文字、图形打印部分给予一一介绍。
基本标签示例:
^XA ‘标签格式开始命令
^LH30,30 ‘Label Home position设置标签起始参考点坐标为30,30,默认为0,0
^FO20,10^AD^FDEXAMPLE^FS ‘^FO20,10-设置数据域起始坐标,距参考点20,10
^AD-定字体为D(内部字体)
^FD-据域开始命令
EXAMPLE实际打印内容
^FS-据域分隔命令
^FO20,60^B3^FDAAA001^FS ‘^B3-选择条码类型为39码
^XZ ‘标签格式结束命令
由上例可见,ZPLII的命令使用还是相当简单的。
下表中,对ZPLII一些常用命令做出解释
设数数
命令名
释义及用法
^XA
标签格式开始命令,每张标签打印都需以此命令开头
^LHx,y
设置标签起始参考点坐标,不使用此命令时默认为0,0
x:x轴坐标(0-9999),y:y轴坐标(0-9999)
注:计量单位为点(dot)
200dpi机器,8点=1mm
300dpi机器,12点=1mm
^LTx
标签内容上下(Y轴)位置整体移动
x:移动的数值,范围:-120 - +120点
^LSa
标签内容左右(X轴)位置整体移动
a:移动的数值,范围:-9999 - +9999点
^FOx,y
设置数据域(包括文字、条码、图形等)起始坐标(左上角)
^FDa
定义打印数据字符,a:打印内容
^FS
数据域分隔命令
^Af,o,h,w
打印文字格式定义
f:字体,默认为0,选择范围:A-Z,0-9(均为打印机内部字体,非TrueType字体)
o:文字方向,N=普通,R=旋转90度,I=旋转180度,
B=旋转270度
h:字符高度,范围:10-1500点
w:字符宽度,范围:10-1500点
^BYw,r,h
设定条码默认参数
w:条宽,缺省为2点,选择范围:1-10点
r:条空比率,缺省为3.0,选择范围:2.0-3.0
h:条码高度
^B3o,e,h,f,g
打印39码
o:条码方向
e:Mod-43校验位,N=No(默认),Y=Yes
h:条码高度,范围:1-9999点
f:是否打印字符行,Y=Yes(默认),N=No
g:字符行位置,N:条码下方,Y:条码上方
^BCo,h,f,g,e,m
打印128码
e:UCC校验位,N=No(默认),Y=Yes
m:模式,一般设为A(自动选择)或忽略不计
^PRp
打印速率
p:速度——2-8(或A-E)=2英寸/秒-8英寸/秒
^PQq
打印数量
q:总数量,选择范围:1-99999999
^GBw,h,t
打印方框
w:方框宽度,h:方框宽度,t:线宽
~DGd:o.x,t,w,DATA
下载图形
t:图形大小,计算方法为:x ×(点/毫米)×(y×(点/毫米)
8
x:图形宽度(毫米),y:图形高度(毫米)
w:每行字节数,计算方法为x ×(点/毫米)
8
DATA:图形的ASCII16进制字符
^XGd:o.x,x,y
调用图形进行打印
d:存储图形的设备(Ram/FlashRam等)
o.x:图形文件名,默认扩展名为GRF
x:x轴缩放系数
y:y轴缩放系数
^IDd:o.x
删除图形
注:以上命令中如果不填写某些参数,则会使用默认参数,速度控制,位置调整等控制命令需置于标签内容设置命令之前,也可忽略这些控制命令,直接在打印机上调节。
以上是一些ZPLII的主要打印用命令,一些较不常用的打印及控制命令未做说明,用户也最好不要轻易使用,以免造成机器软硬件设置的混乱。
使用ZPLII编写好一个标签格式文件后,可使用DOS命令COPY将其发送至打印机端口进行打印,在编写系统软件时当然也可以采用这种方法,但其效率很低。
下面以VB为例,介绍如何在VB中使用ZPLII打印标签。
Private Sub CmdPrint_Click()
Open "LPT1" For Output As #1
Print #1, "^XA"
Print #1, "^LH30,30"
Print #1, "^FO20,10^AD^FDEXAMPLE^FS "
Print #1, "^FO20,60^B3^FDAAA001^FS "
Print #1, "^PQ1,0,0,Y"
Print #1, "^XZ"
Close #1
End Sub
上述方法是将ZPLII命令直接发往LPT1并行打印端口。
在编程中,中文字符的打印应用较多,而如果在程序中直接写入中文字符,打印出的结果会是乱码,针对这种情况,我们可以采用一个动态链接库,使用其中的函数将采用了各种TrueType字体的中文(包括任何语种的文字)转换成16进制码,使得打印机以图形打印方式打印出文字。具体实现方式如下,同样以VB为例。
Private Declare Function GETFONTHEX Lib "" (ByVal chnstr$,
ByVal fontname$, ByVal chnname$, ByVal orient%, ByVal height%, ByVal
width%, ByVal bold%, ByVal italic%, ByVal hexbuf$) As Integer
Private Sub Command1_Click()
Dim nCount As Integer
Dim cBuf As String * 21000
nCount = GETFONTHEX("中文字符打印测试", "宋体", "chnstr01", 0, 30,
0, 1, 0, cBuf)
Open "LPT1" For Output As #1
Print #1, Mid(cBuf, 1, nCount) Print #1, "^XA" Print #1, "^PRB^FS" Print #1, "^BY3,3.0^FS" Print #1, "^FT30,190^BEN,70,Y,N^FD2^FS" Print #1, "^FO30,15^XGchnstr01,1,1^FS" Print #1, "^PQ1,0,0,Y" Print #1, "^XZ" Print #1, "^XA" Print #1, "^IDchnstr01^FS" Print #1, "^XZ"
Close #1
End Sub
VC示例
Void function
writeZebra()
{
FILE * fhandle;
fhandle=fopen("","w+");
fputs("^XAr",fhandle);
fputs("^LH30,30r",fhandle);
fputs("^FO20,10^AD^FDEXAMPLE^FSr",fhandle);
fputs("^FO20,60^B3^FDAAA001^FSr",fhandle);
fputs("^PQ1,0,0,Yr",fhandle);
fputs("^XZr",fhandle);
fputs("n",fhandle);
fclose(fhandle);
::CopyFile("","LPT1",TRUE);
return;
}
DELPHI示例
……
function
GETFONTHEX(outStr,lfFaceName,outstrname:Pchar;lfOrientation,lfHeight,lfWidth,lfBold,lfItalic:Integer;hexBuf:PCHAR):HINST;stdcall;
……
implementation
function GETFONTHEX;external '';
…….
procedure ntClick(Sender: TObject);
var
lpt:textfile;
cbuf:pchar;
str:string;
begin
assignFile(lpt,'LPT1');
rewrite(lpt);
str:=’测试文字’;
//以下调用转换函数将TrueType文字(中文)转换为图形并发送至打印机内存中,参数说明见附录
cbuf:=strAlloc(21000);
GETFONTHEX(pchar(str),'黑体','strtest',0,32,0,0,0,cbuf);
writeln(lpt,cbuf);
strdispose(cbuf);
writeln(lpt,'^XA');
writeln(lpt,'^FO10,240^A0N,60,60^FDTEST^FS’); //使用打印机内部字体0打印文字“TEST”
writeln(lpt,'^FO10,10^XGstrtest,1,1^FS');//打印TrueType文字(中文)
writeln(lpt,'^FO10,100^BCN,100,Y,N,N,A^FD1234567^FS'); //打印128条码,内容为“1234567”,高度为100dots
writeln(lpt,'^PQ1');//打印一张标签
writeln(lpt,'^XZ');
writeln(lpt,'^XA');
writeln(lpt,'^IDstrtest^FS');//清空打印机中的图像缓存
writeln(lpt,'^XZ');
CloseFile(lpt);
end;
附:GETFONTHEX函数参数说明
* 1) LPSTR outStr, // 输出字符串的内容
* 2) LPSTR lfFaceName, // TrueType字体名称
* 3) LPSTR outstrname // 输出字符串的名称
* 4) short int lfOrientation, // 旋转方向: 0,90,180,270
* 5) short int lfHeight, // 字体高度 ,对于200dpi打印机,PC中的12号字在打印机中数值相当于32
* 6) short int lfWidth, // 字体宽度 ,汉字一般设为0,为方块字
* 7) short int lfBold, //字体加粗
* 8) short int lfItalic, // 斜体
* 9) LPSTR hexBuf // 接收转换后图形的缓冲区