admin管理员组文章数量:1539988
2024年6月20日发(作者:)
维普资讯
第27卷
第8期
计算机工程与设计
2006年4月
VO1.27
NO.8
Computer Engineering and Design Apr.2006
斑马条码打印机打印系统的设计与开发
杨迎新, 马月坤
(河北理工大学计算机与自动控制学院,河北唐山063009)
摘要:系统主要是为斑马打印机在SuperMarket2.0系统下调用而开发的打印机驱动软件,是在Delphi7.0企业版开发平台上
实现的。Zebra条码打印模块完成的任务是根据输入信息生成相应ZPL指令集,并输入到Zebra打印机中,由Zebra打印机解
释执行,打印出条码标签,包括时汉字、英文、数字、条码和方框等时象的处理和打印。介绍了该系统设计和实现的关键技术
关键词:斑马条码打印机;ZPL指令集;Delphi 7.0;SuperMarket 2.0;动态链接库
中图法分类号:TP301 文献标识码:A 文章编号:1000.7024(2006)08.1486.03
Design and realization of zebra BarCode printer print system
YANG Ying—xin,MAYue—kun
(Institute of Computer and Automation,Hebei University of Technology,Tangshan 063009,China)
Abstract:This system is a printer driver software ofthe Zebra BarCode Printer in order that it can be tmsfler in the SuperMarket 2.0 sys-
tem based on Delphi 7.0.The task ofthis print model is given ZPL instruction nad input Zebra printerand print the barcode label,include
the process nad print of some o ̄ect is given,such as chinese,lettre, figure,bar code nad pane etc.The design nad realization of some
key technology rae introduced.
Key words;zebra barCode printer;ZPL instruction;delphi 7.0;supermarket 2.0;DLL
0引 言
在该模块中,操作者主要负责选取数据源的数据,数据的
选取工作是由POWERBIULD7.0系统来实现的,首先由PB程
斑马打印机自身携带的驱动程序不能很好地和现有的应
序为各个对象的不同属性分别赋值,然后在本系统模块中由
用软件系统紧密结合,从而限制了斑马条码打印机在应用系
各个对象根据自身属性值生成自己的ZPL指令集,最后打印
统中的使用。为了解决这一问题,我们开发了斑马打印机条
机对象对添加进来的ZPL指令集进行封装处理后发送到打印
码打印系统。该系统是利用Delphi 7.0企业版开发的应用于 机。实现该功能时,首先找出需求中需要系统识别的数据,从
在Windows2000操作系统下开发的应用软件系统的斑马打印 而进一步确定系统需要处理的对象:汉字、英文、数字、条码和
机驱动模块。该模块完全替代了打印机自带的打印驱动程 方框等,如图2所示。
序,是完全定制于我们所开发的应用系统的一个嵌入式组成
部分,通过这种方法实现了打印模块和业务系统的无缝连接。
1 系统设计
该系统的主要功能是设计Zebra条码打印模块,该模块能
够根据输入信息生成相应ZPL指令集,并输入到Zebra打印
一
Zebra打印机
机中,由Zebra打印机解释执行,打印出条码标签。以下域模
型描述了本系统模块人与计算机的结合模型(如图1所示)。
图2对象阵列
上述抽象出的对象在数据库表中各用一个字段来表示,
各字段对象间无直接联系,各个对象字段与打印机对象主要
通过各字段打印机对象的AddField函数发生交互(如图3所
示)。每个字段对象在设置完各种属性后,在提取每个字段的
ZPLS ̄属性或汉字字段的ResZPLs属性时,将会自动根据已
图1 Zebra打印模块域模型
经赋值的其它属性自动生成ZPL指令,然后通过ZebraPrinter
收稿日期:2005.01.15。
作者简介:杨迎新(1972--),女,河北唐山人,讲师,研究方向为多媒体、数据库编程和B/S结构程序设计; 马月坤(1976一),女,河北唐山
人,助工,研究方向为面向对象程序设计和数据库编程。
・—-
1486-——
维普资讯
对象的AddField0方法将每个字段对象所生成的指令字符串
添加到ZebraPrinter对象中,由ZebraPrinter对象负责处理并传
输到打印机中,控制打印机进行打印。
图3系统交互
2主要实现技术
2.1 ZPL指令集
对于每一个对象,都定义了许多字段及相应的属性和方
法,从而形成类。进而形成ZPL指令集。表3给出了打印机对
象的类视图。
表3打印机对象类
字段;
1.strLPTPortName【String】【端口名】【Private】
2.strResZPLs[String】【要传送的指令】[Pfiv ̄e]
属性:
1.LPTPertName[String】【端口名】【suLPTPortName]
方法:
1.WfiteZPLToLPTPort(Const ResZPLs:String);
[向并行端口发送数据】[Private]
2.GetPortName 0[String】
[返回占用的并行端口名称】[Private] [属性LPTPortName】
3,SetPortName(const Value:String);
[设黄程序占用的并行端口][Private] [属性LPTPortName】
4.AddField(Const iXPos:Integer;Const iYPos:Integer;Const ResZPLs;
String);[Public】
[向打印机对象加入各种字段的ZPL】【Public)【外部调用]
5.Print():[Public】【打印条码】[Public】【外部调用]
6.SctDotsPerMillimeter(bValue:Boolean);[Public】
[设置每毫米打印点数]【Public】【外部调用】3.2 Win 2000下并L_】操作
在Windows 2000下,系统不再允许应用程序直接访问并
口,且系统并未像串口一样提供相应API。因此只能将并口视
为文件进行访问。在向并口发送数据和接收数据时,应建立
两个不同线程分别对并口进行数组接收和数据发送。
对于单向并口,接收线程在接收并口发送过来数据时应
判断一下现在发送线程是否正在运行,如发送线程正在运行
则接收线程读取的内容将为尚未发送到打印机的内容。
在发送线程向并口发送数据时,需要将收集来的ZPL指
令集字符串分割成略小于Zebra打印机缓冲区的数据段,然后
发送,否则将会造成数据丢失。
2.3汉字打印
Zebra S-400打印机硬件本身不携带汉字字库,通常情况
下ZebraS-400打印机无法打印汉字。要使ZebraS-400打印机
打印出汉字,必须将所打印出的汉字视为一幅图像,令打印机
按照打印图像的方式来打印汉字,即必须得到汉字点阵。
获取汉字点阵有两种比较常用的方式,现在本系统采用
的获取汉字点阵的方式是,在内存中创建一幅BMP图像,然
后在BMP图像表面直接书写汉字,书写汉字完毕后根据图像
表面不同颜色,获得汉字点阵数据。另外一种方法是使用
UCDOS汉字字库。查找在UCDOS字库中起始位置和中止位
置,两位置之间数据即为该汉字点阵数据。
这两种获取汉字点阵数据的方式中,采用图片方式时最
终生成的点阵数据量略大于采用字库方式,计算速度也稍慢。
但是,采用图片方式可以任意选用Windows中的TrueType字
体,在放大缩小时,不会产生字符变形情况 另外,Windows字
库中。汉字数=垦远远大于UCDOS字库中汉字数量。采用图片
方式提取汉字点阵基本不会发生汉字不在字库中的问题:采用
此方式可以使用任意的TrueType字体,其精美程度远远超过采
用UCDOS点阵的方式:且采用该方式不需要携带多余字库。
在现在采用的以图片方式显示汉字的时候,还有两个地
方至关重要。首先是图片大小,如果图片太大,则最终产生的
数据太多,将会使数据传输时间拉长:如果图片太小,则无法
完全正确地提取汉字点阵数据,将来打印出来的汉字将会出
现断字等情况。
在向BMP位图表面书写汉字的时候。必须采用Windows
API函数直接书写,如果采用Delphi或VC++自带的函数。由
于事件响应机制的不同,在PB调用时,会产生汉字尚未书写,
程序却已经将点阵提取完毕的情况,这样提取出来的点阵其
二进制字符串全部为0,无法正确打印汉字。另外,在向BMP
表面书写汉字的时候,不要按常规采用TextOuti或TextOutEx
API函数。而要采用DrawTextEx函数。这样,当汉字字符串过
长时,可以自动换行。
在设置图片大小的时候,程序必须将输入的数据重新计
算一下,使之成为8的整数倍,因为在ZPL指令集中向打印机
上载图片的指令需要向打印机传递整幅图片字节量和单行图
片字节量,而通过图片方式得到的汉字点阵为一个由0和1组
成的二进制字符串[0表示白色。l表示黑色],每个二进制位代
表一位数据,在计算得到字节量时,如果图片的长和宽不是8
的整数倍,则最后无法精确计算出字节量,此时将数据传入打
印机后,无法正确打印汉字,而将打印出花屏。
下面的程序段是这一部分的核心代码片段
Function GetZIKU(strlnPut:String):String;
{
AssignFile(HZK16,’hzkl6 );
FileMode:=O:
I Set(HZKl 6):
k: ̄Trim(strlnPut);
i:=((0rd(kfl1).161)*94+(ord(k[2])-161)) 32;
Seek(HZK1 6d);
n:=1:
Str:=”;
for liCount:=1 to 32 d0
begin
Read(HZK1 6,i[n1);
strTemp:=IntToHex(Ord(i[n]),2)+tH’;
if((n mod 8)c O)then
-——
1487-——
维普资讯
begin strTemp:=strTemp+’,’;end;
函数中,根据需要打印的条码的版型,分别创建若干字段对象
ifstrTemp[1]>’9’then 以代表条码中不同的字段。并根据字段相应取值为创建完毕
begin strTemp: ’0’+strTemp;end;
的各个字段对象赋值,当所有字段赋值后,创建打印机对象,
str:=str+strTemp;
并将创建的对象所生成的ZPL指令字符通过打印机对象的
ifnmod 8=0then
AddField函数添加到打印机对象中。添加后,调用打印机对
begin str:=str+char(13)+cha ̄10);end;
象的Print函数开始打印一版条码。
n:-n+1;
end;
4结束语
Result:=str;
本系统的实现是多位教师共同努力的结果。该系统已经
{
应用于多家超市,反映效果良好 由于该系统代码较多。这里
forn:=l t0 l6 do
就没有给出代码的具体实现。
begin
q【n】:=p【n】 256州n+l 6】;
参考文献:
end;
I1l1 张桂永.API for Windows 2000/XP详解【M】.北京:清华大学出
strTemp:=copy(inttohex(w,4),3,2 H’;
版社,2003.30-90.
if((2*m mod 8)<>O)then
飞思科技.Delphi 7高级应用开发【M】.北京:电子工业出版社,
begin strTemp: strTemp+',';
2003.15O.165.
end;
Anton Eliens.面向对象软件开发原理【
旧
M】.北京:机械工业出版
ifstrTemp[1]>’9’then begin strTemp:=’0’+strTemp;end;
社。2003.180-213.
str:=str+strTemp;
孙晋文,肖建国.自动文本分类中的智能处理技术[J].计算机科
)
学,2003,3O(8):l 8-2O.
}
张志猛,庄越挺.面向对象软件的逆向工程【J】_计算机发展与研
在使用图片方式提取汉字点阵的时候,需要以循环方式扫
究,2003,(7):l062-l065.
描图片的每一个像素,确定该像素颜色,以生成二进制字符串。 张鹏,唐发根.软件架构设计在XP方法中的实施【J].计算机工
但是在循环到面的时候,必须以列为基准,否则将打印花屏。
程与应用,2003,(33):106-108.
3 DLL外部调用部分修改维护
张玉珍,颜廷睿.DLL及其在delphi中的应用【J].计算机时代,
2005,(1):45.46.
当程序需要修改时,只需要改动Delphi的主要导出函数,该函
吴小林,蒋先刚.基于delphi的多层数据库应用系统连接技术
数参数原型如下:Zebra.Printer(Flag:PChar):Integer;Stdcall;在该
的研究【J].华东交通大学学报,2005,(1):66-70.
(上接第1485页)
报表栏数据多时,更让人不能接受。为了解决这种问题,我们 下行,同时执行速度要比画线方法快多倍。
采用一种变通方法,主要是在模板里增加初始数据行为3行,
然后复制中间行即可。例如,我们要输出下面表1的报表。
4结束语
对于这样的表我们可以建立如表2所示的报表模板。 总之,我们利用多线程技术有效地实现了对Excel报表模
板的自定义设计,并且利用AutoWrap0函数使系统不受具体
表1最终输出报表格式
Excel版本限制 此设计已用于物流信息管理系统,并取得了
栏名1 栏名2 栏名3 栏名4 栏名5 栏名6
较好的效果。
参考文献:
【1】 马宁,蒲浩,詹振炎.Excel表格自动输出【J].计算机应用,2000,
2O(7):70.72.
[2】 于宏文.在程序中利用Excel的模板和名字制作灵活和便于修
改的报表【J].微型电脑应用,2002,18(7):58.59.
【3】 郑存红,胡荣强,赵瑞峰.VC++程序数据在Excel中的动态显示
【J].武汉理工大学学报(信息与管理工程版),2002,24(5):39.4 1.
【4】 陈清华,潘地林.用VC结合Excel实现煤矿机械试验报表制
作【J1.煤矿机械,2004,(4):59.61.
这样我们在插入新的行时只需将栏名下的第2行复制到下面
【5】 陈国华.基于Excel的报表引擎的研究与设计【J】_计算机工程
即可,这样不仅保证了格式一致,而且将上行的计算信息带到
与设计,2004,25(4):526 529.
-——
1488-——
版权声明:本文标题:斑马条码打印机打印系统的设计与开发 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/shuma/1718859907a734659.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论