VB应用程序中打印条形码的两种方法
条形码作为一种机器可识别的图形,它能快速、准确地标识某种产品或商品,在许多数据库应用中起作很重要的作用,如超市收银、车站售票等场合。当某件物品上带有的条形码被条码扫描器正确解读后,将会得到该物品的唯一标识字符串,通过检索数据库我们就可以很容易知道它的一些其它属性并作相应处理。上能找到许多免费和不免费的条形码打印控件,但是这些控件除了使用不方便外,还有一个最大的缺点:它们的打印输出不能和我们的程序共存在一个打印页面上,比如说在一个过程中,我们先向系统 Printer 中输出一些内容,然后再调用控件的条形码打印方法,最后打印的结果为两页!,如果现在我
们要处理一张车票,上面不仅要打印条形码,还要有终点站和票价等信息,那么控件就变得不可用。对程序员来说,可能还是希望能了解条形码打印的原理,本文提出两种打印方法与同行们探讨。
一、直接利用有条形码打印功能的打印机
有许多打印机能够直接打印条形码,但在 VB 中,我们在DOS时代熟悉的LPRINT语句已经不能再使用了,打印操作被Windows的Spool系统完全接管,输出是以"页"为单位,所有的打印输出都被Windows转换为图形发送给打印驱动程序。而要使打印机打印条形码就必须将对应的ESC序列直接发送给它,因此我们就要想办法避开Windows的Spool系统,也就是说再程序中不能使用Printer对象和Printers集合处理打印输出,在VB中要将ESC指令直接发送给打印机至少有三种方法,前两种方法是调用Windows API 函数:Escape()和SpoolFile(),第三种是最容易的方法:打开打印机端口进行二进制存取,我们主要考虑这种方法。
即使在Windows时代,"LPT1:"和"PRN"仍然是可用的,下面我们先作一个试验:打开一个DOS窗口,在提示符下输入COPY CON LPT1:回车,然后随便输入一些字符,最后按F6键,打印机就开始工作了,它将打印出你输入的那些字符!下面的代码演示了直接将指令和字符发送给打印机:
Private mand1_Click()
Dim strOut As String
StrOut = "这是直接发送到打印机端口的字符串"
' 打开打印机端口,其中的"LPT1:"可能需要根据你的打印机设置而改变
Open "LPT1:" For Binary Access Write As #1
' 发送给打印机,注意语句的最后一个参数必须是变量
Put #1, ,strOut ' 关闭打印机端口
Close #1
End Sub
各种打印机打印条形码的指令可能不同,比如将上面的变量 strOut赋值为:
strOut = Chr(28) & "P" & Chr(5) & Chr(2)
& Chr(3) & Chr(3) & Chr(6) & "012345"
将在 AR2400 打印机上打印出内容为"012345"的 CODE39 格式的条形码。具体的打印控制指令请参考打印机手册。
用这种方法的缺点:一是过份依赖打印机本身,而有条形码打印功能的打印机通常要比普
vb应用程序中打印条形码的两种方法 来自淘豆网m.daumloan.com转载请标明出处.