条码打印机:PB程序中在普通激光打印机上实现条码打印

  随着计算机在生产、销售、管理上应用水平提高以及Internet 、Intranet 普及条码技术在生产管理、销售管理上使用越来越多条码编码技术和识别技术也得到了较快发展我单位因建设信息管理系统需要使用条码识别生产中光纤并用来管理光纤需要给多台客户机配备条码打印功能但普通条码打印机价格比较昂贵功能比较单给每台计算机配条码打印机是很不合算也给工作带来不便

---- 我们利用MIS系统前台开发工具PowerBuilder 6.0 设计了在普通激光打印机上实现了条码打印圆满解决了生产管理上条码问题

---- 现在条码编码使用较多是39码日常商品上随处可见它包括识别代码和前后各个'*'区别条码起始和结束其编码思路方法是每个编码由5条黑线和相邻黑线的间间隙来表示黑线表示 1 窄则表示 0同样黑线的间间隙宽表示 1表示 0 这样个9位 2进制数就用来表示例如001100100 (前面5位由线表示后4位为空格)表示十进制 0在39码规则里9位数中必须有3位是1由此规则键盘上26个字母和10个数字以及常用些符号都有对应39码编码我们就是利用此规则进行设计

---- Powerbuilder 提供了个prline:

---- PrLine ( prjobnumber, x1, y1, x2, y2, thickness )在个prjobnumber中可以打印多条直线线位置由指定坐标确定线宽由Thickness 决定这样就可以由实现我们预定功能

---- 在PB中定义这里举例为窗口:

wf_barpr(long job, eger x_pos ,
eger y_pos,bar_width as ger, code )
s eger
// x_pos y_pos 为条码打印起始位置
//Bar_Width 条码窄线宽度
//code ,要打印

char Bar_Card[20],Bar_Pr[22]
char Temp_Card[12]
Bar_Table[40]
i,j,X_Scan,Cal_Card,y_scan

x_scan = x_pos
y_scan = y_pos


Bar_Table[1]='00110-0100' // 0
Bar_Table[2]='10001-0100' // 1
Bar_Table[3]='01001-0100' // 2
Bar_Table[4]='11000-0100' // 3
Bar_Table[5]='00101-0100' // 4
Bar_Table[6]='10100-0100' // 5
Bar_Table[7]='01100-0100' // 6
Bar_Table[8]='00011-0100' // 7
Bar_Table[9]='10010-0100' // 8
Bar_Table[10]='01010-0100' // 9
Bar_Table[11]='10001-0010' // A
Bar_Table[12]='01001-0010' // B
Bar_Table[13]='11000-0010' // C
Bar_Table[14]='00101-0010' // D
Bar_Table[15]='10100-0010' // E
Bar_Table[16]='01100-0010' // F
Bar_Table[17]='00011-0010' // G
Bar_Table[18]='10010-0010' // H
Bar_Table[19]='01010-0010' // I
Bar_Table[20]='00110-0010' // J
Bar_Table[21]='10001-0001' // K
Bar_Table[22]='01001-0001' // L
Bar_Table[23]='11000-0001' // M
Bar_Table[24]='00101-0001' // N
Bar_Table[25]='10100-0001' // O
Bar_Table[26]='01100-0001' // P
Bar_Table[27]='00011-0001' // Q
Bar_Table[28]='10010-0001' // R
Bar_Table[29]='01010-0001' // S
Bar_Table[30]='00110-0001' // T
Bar_Table[31]='10001-1000' // U
Bar_Table[32]='01001-1000' // V
Bar_Table[33]='11000-1000' // W
Bar_Table[34]='00101-1000' // X
Bar_Table[35]='10100-1000' // Y
Bar_Table[36]='01100-1000' // Z
Bar_Table[37]='00011-1000' // -
Bar_Table[38]='10010-1000' // %
Bar_Table[39]='01010-1000' // $
Bar_Table[40]='00110-1000' // *

Bar_Card = upper(code)
left(bar_card,1) < > '*' then
Bar_Pr = '*' + Bar_Card // 添加起始符
end
right(bar_card,1) < > '*' then
Bar_Pr = Bar_Card + '*' // 添加结束符
end
j = 1


do
(Bar_Pr[j] = '*') then
Cal_Card = 40
(Bar_Pr[j] = '-') then
Cal_Card = 37
(Bar_Pr[j] >= 'A') then
Cal_Card = 11 + asc(Bar_Pr[j])
- asc('A')
(Bar_Pr[j] >= '0') then
Cal_Card = 1 + asc(Bar_Pr[j])
- asc('0')
end
Temp_Card = Bar_Table[Cal_Card]
for i = 1 to 5
(Temp_Card[i] = '0') then
X_Scan = X_Scan + Bar_Width / 2
PrLine(Job,X_Scan,y_scan,
x_Scan,y_scan + 550,Bar_Width)
X_Scan = X_Scan + Bar_Width / 2

X_Scan = X_Scan + Bar_Width * 3 / 2
PrLine(Job,X_Scan,y_scan + 6,
x_Scan,y_scan + 544,3 * Bar_Width)
X_Scan = X_Scan + Bar_Width * 3 / 2
end
(Temp_Card[6 + i] = '1') then
X_Scan = X_Scan + 4 * Bar_Width

X_Scan = X_Scan + 3 * Bar_Width /2
end
next
j = j + 1
loop while (Bar_Pr[j] < > '')

prtext(job,code,X_scan - 1200,y_scan + 600)

1

---- 通过以上自定义和PrBitmap ( prjobnumber, bitmap, x, y, width, height )、prtext配合可以在普通激光打印机上方便打印出漂亮条码和辅助图案的所以在时直接确定prjobnumber是为了方便在出报表时同个prjobnumber下将报表和条码打印在张纸这样使您报表显得非常专业也很漂亮
Tags:  条码打印机

延伸阅读

最新评论

发表评论