http://blog.csdn.net/pbdesigner/article/details/3906156
在信息系统开发时通常有用户要求能够打印条码,如CODE128码,使用专门的条码打印程序固然可能,但难以与你的信息系统接轨,虽然也有支持数据源为数据的条码打印程序。通常有几种方法实现条码的打印:一、直接向打印机发送控制命令,二、使用条码字体,三、印刷。各有优劣,使用条码字体的方法无疑是最简单、经济的做法,如果对条码识别精确度不高(比如使用下面我提供的方法由最大分辨率为200dpi的条码打印机打印出来的条码在条码检测仪上被评为F级即最低级),建议试试条码字体的方法。
以下代码可实现在PB中将源字符串转为可打印的CODE128码字符串。为了能正确显示条码并能打印,你必须先安装CODE128码字体并将显示为CODE128码的对象的字体设置为CODE128码。例如,在PB数据窗口对象中创建一个表达式类似“f_getcode128(要显示成CODE128码的栏位)”的计算列,字体设置为CODE128码。
F_getcode128实现的是CODE128B版本,你可以根据CODE128的编码原理实现A版本和C版本。要注意的是,由于CODE128码字符串包含不可正常显示的字符,你必须使用支持Unicode码的PB版本,如PB10以上。
附CODE128码在PB中的实现源代码。
/*******************************************************************
函数名称:f_getcode128()
参数: as_sourcetext string 源字符串
返回值: string 转成code128码后可打印的字符串
功能描述:取code128码字符串
创建人: 康剑民
创建日期:2008-12-10
版本号: V1.0
备注:要在PB中正常打印code128码字符串,必须使用PB10以上(支持Unicode码)
*******************************************************************/
//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