—-条形码技术简介
—-条形码作为一种识别输入技术,由于其显而易见的快速、准确、低廉等优点,被广泛应用于商品流通、图书馆管理等众多的自动化管理系统中。
—-条形码是利用条(着色部份)、空(非着色部份)及其宽、窄的交替变换来表达信息。每一种编码,都制定有字符与条空、宽窄表达的对应关系,只要遵循这一标准打印出来的条、空交替排列的“图形符号”,这一“图形符号”中就包含了字符信息;当识读器划过这一“图形符号”时,这一条、空交替排列的信息通过光线反射,在识读器内,这种光信号被转换成数字信号,再经过相应的解码软件,就能将“图形符号”还原成字符信息。
—-三九码是一种应用比较普遍的条形码,它长度可变、可校验,容纳的字符多达43个(包括数字0~9、字母A~Z及其它七个特殊字符)。由于在表示每一字符时,使用9个元素,其中3个宽元素、6个窄元素,故名39码,这3个宽元素中必须有两个是条(有四个特殊用途的字符除外)。如字母“J”的编码规则为:“NNNNWWWNN”,其中N表示窄元素,W表示宽元素,奇数位为条元素,偶数位为空元素,宽窄元素的宽度尺寸比为2~3,且在同一个条码中必须是固定的。在打印制作条形码时,条是需要打印(着色)的,而空元素内不必打印的,不过要将其宽度计算在内。对于某一要打印的字符串,按其先后顺序打印,串前串后各加一个“*”符号做为起始符与终止符,相邻的字符间在打印时由“位空”分隔,“位空”类似空元素,即不着色部分,其宽度应小于1.35mm,为编程方便,通常取为一个窄元素的宽度。
—-条形码的制作有制版印刷、轻印刷两种方式,轻印刷是指使用普通打印机,在计算机控制下制作条形码。这种制作方法灵活,成本较低,即适宜于同一号码的单条制作,也可用于同一号码的大量制作,这一特点是制版印刷无可替代的。使用计算机软件打印条形码,其原理是将条形码作为图形来看待,用编程语言中的绘图语句-画矩形框,在相应的坐标上画出各种宽度不同的条元素,这样即可实现条形码的计算机软件打印。
—-VB中几种打印功能在条码打印时的比较
—-VisualBasic是近年来比较流行的编程语言,功能强大,易学易用。VisualBasic对打印功能提供了两种输出方式:一是首先将条码输出到某一对象,再使用该对象中Print方法,将其输出到打印机;二是使用打印机对像Printer绘图。下面对这种方法做个比较:
—-一、将条形码图在窗体上绘出,再使用PrintForm方法打印窗体。
窄条打印:Line(x,y)-step(i,h),,bf
宽条打印:Line(x,y)-step(3*i,h),,bf或
Line(x,y)-step(2*i,h),,bf
—-再使用formname.PrintForm将条形码输出到打印机。
—-在这种方式下,窗体的量度单位可以有:twip,point,picel三种其中以twip为单位为最小。
—-以twip为单位,对条形码来说,打印精度可达30,即当窄元素宽度必须等于或大于30时,打印出来的条形码可以阅读,若窄元素的宽度小于30,条形码中相邻的条会粘连在一起,无法识读。当窄元素宽度为30时,“J10059”六位字符条码尺寸为:67mm。
—-以Picel为单位,打印精度可达2,当窄元素宽度为2时,“J10059”六位字符条形码尺寸为80mm以上。
—-以Point为单位,打印精度可达2,当窄元素宽度为2时,J10059六位字符条形码尺寸为110MM。
—-二、直接使用Printer.Line,在打印机上绘画-画矩形框
窄条打印:Printer.Line(x,y)-Step(i,h),,bf
宽条打印:Printer.Line(x,y)-Step(3*i,h),,bf或
Printer.Line(x,y)-Step(2*i,h),,bf
—-用Printer.Line打印,量度单位为点,最小精度为达10,当窄元素宽为10时,J10059六位字符之条码尺寸为:21MM。
—-根据以上的比较,使用第二种方法打印输入的条形码精度最高(同样的字符数,尺寸最短)。很显然,不同的打印方式,分别有不同的适用范围,对尺寸宽度要求不高的情况下,可以使用第一种打印方式,若对条形码尺寸要求较严格,则使用第二种打印方式更合适。
—-软件设计
—-一、菜单设计:由于条形码轻印刷软件相对说来是一个很小的系统,需要选择的项目不多,可以不设置菜单,而将全部的操作由窗体控件来完成。如果使用上述的第一种打印方式,则必须建立另一窗体,用于第一步的输出条形码图形。
—-二、设计窗体控件:窗体中的控件包括两大类,即:参数设置框、打印操作按钮。本列设计的窗体见图示。本列给出的是一个对参数没有设置功能的窗体,有兴趣的读者可以在此基础上自行补充它。
—-对于打印参数,对条形码的打印来说,需要指定的参数大致有:条码宽窄比:3:1~2:1;条码高;窄元素宽度;打印机类型及端口;打印份数;打印纸尺寸规格;每行条形码数;每个条码的字符数;是否自动增值打印;增值步长;每一页行计数起止数;终止码等。
—-本列设计了八个按钮,其作用分别是:
—-Begin-单号条形码打印开始
—-Auto-自动增值打印开始
—-Page-将打印机内存中的条码(不足一页)打印出来
—-Cancel-中止自动增值打印
—-Delete-清除打印机内存中的未打印条码
—-Help-帮助信息
—-About-版本及设计信息
—-Exit-关闭系统
—-三、程序流程:
—-在本例中,条形码的打印分为单号打印;自动增值打印两种。单号打印,是用户输入一个或几个需要打印的号码的打印方式;而自动增值打印是用户指定起始号、终止号及增加步长,由机器自动生成被打印号码来打印。其实这两种方式在打印时的操作是完全一样的,不同之处在于被打号码的获取,需要注意的是由于39码字符集中包括字符,在自动增值时要与纯数字码区别。
—-下面以单号打印为例,介绍条形码打印的程序流程。
—-1.检查各项参数设置是否完全正确,若正确,则继续,否则退出;
—-2.获取各项参数设置;
—-3.为X坐标取初值(纸的左边打印边界);
—-4.(循环A)是否打印完一行(I条条码)?是则转14;
—-5.本条条码是否为空?是则将横坐标加上一条条码之宽度;
—-6.打印起始符;
—-7.(循环B)是否打印完本条条码(J个字符)?是则转10;
—-8.打印一个字符的条码;
—-9.(循环B)下一个字符;
—-10.打印终止符;
—-11.修改X坐标;
—-12.(循环A)下一条条码
—-13.修改Y坐标;
—-14.打印本行每一条码的人工识别字符;
—-15.本页是否已打满?是则打印,并对新页坐标初始化;
—-16.退出
—-四、程序代码:
—-用于检查参数设置正确性的程序主要从各项参数间的关系去检查。如根据使用的宽度、高度、每行条码数,判断是否超出了纸的打印范围;输入的号码是否合法等。
—-可以为每字符设计一段各自的打印程序,这种方式编程简单。也可以将打印程序与条形码的编码规则分离,通过参数传递某一字符的编码规则,不同的字符共享同一打印程序。本列采用前一种方式。如字母“J”的编码规则为:“NNNNWWWNN”,打印程序代码如下:
PrivateSubprn_J()
Printer.Line(x,y)-Step(widt,high),,BF打印窄条
x=x widt改变X坐标
x=x widt打印窄空
Printer.Line(x,y)-Step(widt,high),,BF
x=x widt
x=x widt
Printer.Line(x,y)-Step(w_n*widt,high),,BF打印宽条
x=x w_n*widt改变X坐标
x=x w_n*widt打印宽空
Printer.Line(x,y)-Step(w_n*widt,high),,BF
x=x w_n*widt
x=x widt
Printer.Line(x,y)-Step(widt,high),,BF
x=x widt
x=x widt打印位空
EndSub
—-其中x,y分别为坐标值,w_n为宽窄元素宽度比,widt为窄元素的宽度值(点),high为条形码高度,每打印一个条元素,应立即改变X坐标,以便打印下一个元素;打印空元素时,由于是不着色,只需改变X坐标即可;每一个字符打印结束时,应打印一个位空(本列中位空宽度等于窄空)。其它的42个字符的编码规则,读者可以在有关条形码技术的文献中查到。->