PB条码打印探讨

       在信息系统开发时通常有用户要求能够打印条码,笔者现在就power builder 工具开发的系统初略的介绍一下条码的实现方式及其优缺点。本文主要讨论code39和code128的实现方法。
       code39总共可表示的字符范围:0~9,A~Z以及 +、-、*、/、%、$、.等特殊字符,在加上空格符‘ ’,共计44组编码,条码没有长度限制。但code39码能表示的字符的范围挺小的,而且表示出来的条码也比较长。然而,这种条码这pb中实现起来很简单。

       Code128相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用。它具有A、B、C三种不同的编码类型,可表示的范围也很广,具体特性大家可以到网上查找相关资料。它能表示高密度数据,条码不会太长。

一、使用条形码字体实现code39、code128
       需要在本机上安装code39或code128字体,需要注意的是由于CODE128码字符串包含不可正常显示的字符,你必须使用支持Unicode码的PB版本,如PB10以上。
       对于code39来说,通常用“*”号作为起始、终止符,校验码不用。如‘6921168509256’的值为:*6921168509256* 。在数据窗口中可以加一列计算列,表示为:'*'+yourcode+'*' ,然后在将计算列的字体选为:3 of 9 Barcode ,设置一下大小就可以了。需要注意的是code39条码一般都会很长,最好不要用它来表示太长的条码。在pb9和pb10中测试没有问题,用激光打印机打出来的条码可以在普通的条码扫描枪上正确识别。
       对于code128来说实现起来没那么容易,Code128编码规则:开始位 + [FNC1(为EAN128码时加)] + 数据位 + 检验位 + 结束位。所以这要求我们先要计算出编码结果,然后用128字体表示出来。笔者在网上找了一个实现code128B版本的转换函数,使用它可以将字符串轻松转换。当然,如果大家有时间可以到网上好好查查code128的编码规则,然后自己写个函数。
附CODE128码在PB中的实现源代码。
/*******************************************************************/
//CODE128条码基础知识
//CODE128有三个版本
//CODE128A: 标准数字和字母, 控制符, 特殊字符
//CODE128B: 标准数字和字母, 小写字母, 特殊字符
//CODE128C: [00]-[99]的数字对集合, 共100个
//本函数采用CODE128B版本
//条码由开始位、数据位、校验位、停止位组成
//计算过程:
//1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)
//2.计算校验码
//3.组合条码:开始位+数据位+校验位+停止位
int li_asc_total = 104
int li_asc_tmp,i
char lc_start=char(204)//采用CODE128B版本
char lc_stop=char(206)
int li_check_digit
string ls_check_digit
 
//1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)
For i = 1 To len(as_sourcetext)
        li_asc_tmp = Asc(mid(as_sourcetext,i, 1))
        If li_asc_tmp >= 32 Then
                li_asc_total = li_asc_total + (li_asc_tmp - 32) * i
        Else
                li_asc_total = li_asc_total + (li_asc_tmp + 64) * i
        End If
Next
//2.计算校验码
li_check_digit = mod(li_asc_total,103)
If li_check_digit >= 95 Then//特殊字符
       li_check_digit = li_check_digit + 100
Else
        li_check_digit = li_check_digit + 32
end if
ls_check_digit = char(li_check_digit)
//3.组合条码:开始位+数据位+校验位+停止位
Return lc_start + as_sourcetext + ls_check_digit  + lc_stop

       先感谢一下函数的作者辛苦劳动。将转换后的字符串以128字体的方式显示即可。最后测试没问题,激光打印机打出来的条码可以在普通的条码扫描枪上正确识别。
二、使用MSBCODE9.OCX实现
       这是微软提供的条码控件,可以表示多种条码字体,具体资料大家可以查阅MSBCODE9.CHM,可以到office安装目录下查找。
  msbcode9.ocx是微软公司OFFICE自带的一个条码控件。不需要条码字体直接就可以打印一些条码,比如CODE128、CODE39等。而且对于开发环境没有太多的限制,至少pb9、pb10都测试通过。
  1、首先你要注册一下msbcode9.ocx控件。regsvr32 msbcode9.ocx
  2、使用ole在PB中把注册的控件增加到窗口中或数据窗口中。
  3、双击控件就会看到一些属性,包括选择条码字体。
  4、不过也可以在程序中用代码来控制。
    dw_1.o b j e c t.ole_1.o b j e c t.style = 7 //7代表CODE128 6代表CODE39

    dw_1.o b j e c t.ole_1.o b j e c t.value = '条码值'


       然后就可以打印了,最后测试没问题,激光打印机打出来的条码可以在普通的条码扫描枪上正确识别,而且扫描效果很好,比用字体实现的要好。但存在另一个问题,如果想要打印一批单据,每个单据都带条码的话,用条码字体比较好实现,用控件的话不好实现。可以先把ole对象存在数据库中,最后检索出来,但日后数据库检索的速度会很慢,这是因为存储ole对象的缘故。
 三、其他
       还有一些使用图片生成条码的,其实质也是先通过字符串编码转换为条码编码,然后以图片的形式进行显示,感觉倒不如使用控件更直接。对于直接向打印机发送控制命令来实现条码的方式,笔者没有进行测试,希望有兴趣的可以试试。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PB 9.0(PowerBuilder 9.0)是一种用于开发数据驱动的商业应用程序的集成开发环境(IDE),可以用于创建各种类型的应用程序,包括发票打印。发票打印是指使用计算机和相关软件,将业务数据按照一定格式打印在纸质或电子发票上的过程。 在PB 9.0中,可以通过设计界面和使用编程语言来实现发票打印功能。首先,可以使用界面设计器创建一个适当的发票打印表单模板,包括发票号码、日期、销售项目、数量、价格等字段。然后,可以使用编程语言(通常是PowerScript)来获取与发票相关的数据,例如从数据库中检索需要打印的数据。 在编程中,可以定义打印事件和处理程序,以便控制打印操作。例如,在打印事件中,可以执行以下操作: 1. 根据模板将数据填充到发票表单中的对应字段。 2. 控制打印格式,如字体、颜色、布局等。 3. 自定义页眉和页脚,添加公司logo、地址、联系方式等。 4. 处理特殊情况,如多页发票的分页处理。 一旦定义完打印事件,就可以通过调用相关的打印函数或方法来触发发票打印操作。PB 9.0具有灵活的打印功能,可以支持各种类型的打印设备,如打印机、PDF文档、电子邮件附件等。 总之,PB 9.0是一种强大的开发工具,可用于开发发票打印功能。通过利用其界面设计器和编程语言,可以定制发票表单模板,并实现与业务数据的交互和打印操作的控制。这样,用户可以方便地生成符合公司需求的发票,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值