由 小飞 | 2019/12/08
飞印盒子驱动标签打印机的时候具有各种模式,这里常见的ZPL和EPL、TSC等概念是什么呢?
这些都是标签语言的术语
条码打印机是一种专业的打印设备,其打印实现方式与普通的激光、喷墨或针式打印机有所不同。
世界各大条码打印设备厂商生产的打印机都采用了各自不同的打印语言以实现其打印,如Zebra系列的ZPL(斑马条码打印机工业型号),Eltron的EPL(斑马条码打印机桌面小机器),Datamax的DPL等。
与普通打印方式相比,采用打印语言的优点在于速度快,精度高,但由于没有统一的标准打印语言,使得用户在使用不同机器时会产生一定的麻烦,好在各种打印语言的语法比较类似,上手也是比较简单的。
它们的工作原理其实很简单:利用这些编程语言,编辑好一个打印的指令集,发送给条码打印机,条码打印机就会按照你事先编辑的命令去进行打印的工作。
不同品牌的打印机,打印指令是不一样的,所以你用了ZPL来编程出来的指令,不能用在其他品牌的打印机上,包括EPL语言的机器上了。
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一些常用命令做出解释
命令 | 含义解释 |
---|---|
_____________ | _____________________________________________ |
^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:线宽 |
_____________ | _____________________________________________ |
TSPL语言开发实例
以下代码内容为一个最简单标签的必备要素,以此为例,详解设计标签时必备的内容和要点。
一个基本的标签实例
SIZE 60 mm,40 mm
GAP 2 mm
CLS
TEXT 50,50,"4",0,1,1,"DEMO FOR TEXT"
PRINT 1
一张标签通常包含三个部分,即系统设定、打印内容设定和执行打印指令。
系统设定包括标签尺寸(SIZE、GAP)和清除缓冲区数据指令(CLS)等。
打印内容设定可以参考本文档卷标内容设计指令内容,本例中系打印文本。
执行打印指令用于打印出设计好的标签,在此指令发送后打印机才执行打印动作。
需要特别注意,在每一条指令结尾需要加入换行符,即字符串“\r\n”或 16 进制 0x0D 0x0A
语法说明
以下为打印标签时的常用控制指令(在飞印盒子测试页中默认会带有一段这种语法的控制指令):
SIZE
该指令用于设定卷标纸的宽度和长度。 使用公制单位,现在我们的标签大小为60mm*40mm。 注 : 200DPI:1mm = 8dots 使用公制单位,在单位与数字之间必须添加一个空。 指令示例: SIZE 60 mm,40 mm
GAP
该指令用于定义两张卷标纸间的垂直间距距离。 可以设置2mm或者不设置 指令示例: GAP 2 mm
CLS
该指令用于清除图像缓冲区(image buffer)的数据。 注:此项指令必须置于SIZE指令之后。 指令示例: CLS
该指令用于打印出存储于影像缓冲区内的数据 可设置打印多张,需放在全部指令最后的位置。 指令示例,打印一张: PRINT 1
TEXT
该指令用于打印字符串。
指令语法:
TEXT x,y,"font",rotation,x-multiplication,y-multiplication,"content"
以下是详细参数说明:
参数 | 说明 |
---|---|
_____________ | _____________________________________________ |
x | 文字 X 方向起始点坐标 |
y | 文字 Y 方向起始点坐标 |
_____________ | _____________________________________________ |
font | 字体名称 |
1 | 8×12 dot 英数字体 |
2 | 12×20 dot 英数字体 |
3 | 16×24 dot 英数字体 |
4 | 24×32 dot 英数字体 |
5 | 32×48 dot 英数字体 |
6 | 14×19 dot 英数字体 OCR-B |
7 | 21×27 dot 英数字体 OCR-B |
8 | 14×25 dot 英数字体 OCR-A |
9 | 9×17 dot 英数字体 |
10 | 12×24 dot 英数字体 |
TST24.BF2 | 繁体中文 24×24Font(大五码) |
TSS24.BF2 | 简体中文 24×24Font(GB 码) |
K | 韩文 24×24Font(KS 码) |
_____________ | _____________________________________________ |
rotation | 文字旋转角度(顺时针方向) |
0 | 0 度 |
90 | 90 度 |
180 | 180 度 |
270 | 270 度 |
_____________ | _____________________________________________ |
x-multiplication | X 方向放大倍率 1-10 |
y-multiplication | Y 方向放大倍率 1-10 |
_____________ | _____________________________________________ |
注意:五号字英文字母仅可打印大写字母
若要打印双引号时(“)在程序中请使用 [”] 来打印双引号
若要打印0D(hex)字符时,请在程序中使用[R]来打印CR
若要打印0A(hex)字符时,请在程序中使用[A]来打印LF
使用说明:
一倍倍率下,60mm宽的标签,可以打印19个全角中文字符或者39个半角字母数字,中文字体高度为24dtos。
TSPL打印时没有居中指令,需要手动设置
打印不会自动换行,超出宽度的文字将无法正常打印,所以多行文本,需要用到多个TEXT指令,每一打印文本的起始打印位置都需要手动设置,单位为dtos,即点阵数。60mm*40mm的点阵比为480*320。
常见的文字打印指令示例:
TEXT 0,10,"TSS24.BF2",0,1,1,"一二三四五六七八九十二二三四五六七八九十"
TEXT 0,30,"TSS24.BF2",0,1,1,"12345678902234567890323456789042345678905234567890"
BAR
该指令用于在标签上画线。
指令语法:
BAR x,y,width,height
以下是详细参数说明:
参数 | 说明 |
---|---|
_____________ | _____________________________________________ |
x | 线条左上角 X 坐标,单位 dot |
y | 线条左上角 Y 坐标,单位 dot |
_____________ | _____________________________________________ |
width | 线宽,单位 dot |
height | 线高,单位 dot |
_____________ | _____________________________________________ |
指令示例:
BAR 100,100,300,200
BARCODE
该指令用来画一维条码
指令语法:
BARCODE x,y,"code type",height,human readable,rotation,narrow,wide,"content"
以下是详细参数说明:
参数 | 说明 |
---|---|
_____________ | _____________________________________________ |
x | 左上角水平坐标起点,以点(dot)表示 |
y | 左上角垂直坐标起点,以点(dot)表示 |
_____________ | _____________________________________________ |
code type | 建议使用39或128 |
_____________ | _____________________________________________ |
height | 条形码高度,以点(dot)表示 |
Human readable | 0 表示人眼不可识,1 表示人眼可识,即在条码下显示内容 |
_____________ | _____________________________________________ |
rotation | 条形码旋转角度,顺时针方向 |
0 | 不旋转 |
90 | 顺时针方向旋转 90 度 |
180 | 顺时针方向旋转 180 度 |
270 | 顺时针方向旋转 270 度 |
_____________ | _____________________________________________ |
narrow | 窄 bar 宽度,以点(dot)表示 |
wide | 宽 bar 宽度,以点(dot)表示 |
_____________ | _____________________________________________ |
content | 一维码内容 |
_____________ | _____________________________________________ |
注:条码肉眼可见时,需要预留条码内容的显示位置,内容高度24dot
指令示例:
BARCODE 100,100,"128",50,0,0,2,4,"4600408762105840"
QRCODE
该指令用来打印二维码
程序语法:
QRCODE x,y,ECC level,cellwidth,mode,rotation,"data string"
参数 | 说明 |
---|---|
_____________ | _____________________________________________ |
x | 二维码水平方向起始点坐标 |
y | 二维码垂直方向起始点坐标 |
_____________ | _____________________________________________ |
ECC level | 选择 QRCODE 纠错等级 |
L | 7% |
M | 15% |
Q | 25% |
H | 30% |
_____________ | _____________________________________________ |
cell width | 二维码宽度 1-10 |
mode | 手动/自动编码 |
A | Auto |
M | Manual |
_____________ | _____________________________________________ |
rotation | 旋转角度(顺时针方向) |
0 | 0 度 |
90 | 90 度 |
180 | 180 度 |
270 | 270 度 |
data string | 编码的字符串 |
_____________ | _____________________________________________ |
指令示例:
QRCODE 50,50,M,6,A,0,"www.feyin.cn"
结束语:ZPL与TSPL这两种典型的标签开发语言的对比通过这篇文章可以略知一二,尽管用的关键词不同,但是基本功能是接近的,另外有一些较不常用的打印及控制命令未做说明,用户也最好不要轻易使用,以免造成机器软硬件设置的混乱。