2024年4月30日发(作者:)

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点

^B3o,e,h,f,g

^BCo,h,f,g,e,m

^PRp

^PQq

^GBw,h,t

r:条空比率,缺省为3.0,选择范围:2.0-3.0

h:条码高度

打印39码

o:条码方向

e:Mod-43校验位,N=No(默认),Y=Yes

h:条码高度,范围:1-9999点

f:是否打印字符行,Y=Yes(默认),N=No

g:字符行位置,N:条码下方,Y:条码上方

打印128码

e:UCC校验位,N=No(默认),Y=Yes

m:模式,一般设为A(自动选择)或忽略不计

打印速率

p:速度——2-8(或A-E)=2英寸/秒-8英寸/秒

打印数量

q:总数量,选择范围:1-99999999

打印方框

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,lfW

idth,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 // 接收转换后图形的缓冲区