在powerbuilder中调用ESC/POS命令无控件方式打印条码
2015-05-09 09:02
1156 查看
因工作需要,需要在pos结款小票上打印条码,一开始想到控件方式实现,但是这种方式不太稳定,而且速度较慢。因为使用的热敏打印机是EPSON TM-58型打印机,所以想到了可以使用ESC/POS命令来实现条码的打印,这种方式不但速度快,而且可以在所有兼容ESC/POS指令集的打印机上通用,并且不涉及控件调用的问题,方便移植到不同的平台。
本文主要以CODE128 C编码举例,其他编码大同小异,需要了解编码方式的请参考相关介绍ESC/POS指令集的文档。代码如下:
代码中有一个需要注意的地方是,因为pb无法表示‘~h00’,如果在字符串中直接使用'~h00'会被pb忽略,所以在这里使用了一个1位的blob类型来存储这个'~h00'。
本文主要以CODE128 C编码举例,其他编码大同小异,需要了解编码方式的请参考相关介绍ESC/POS指令集的文档。代码如下:
//函数名称:f_code128c //函数用途:将传入的12位字符串按照code128c编码规范计算得到供打印的字符串 // tm-58打印机最大支持16位条码,此处12位为演示用 //函数参数:as_in string val 传入的欲计算的12位条码 // ab_result blob ref 计算后得到的供打印的字符串 blob类型 //返回值:int 0成功 -1失败 //作者:鸡翅多 zeng78@gmail.com //创建时间:2015-5-7 /* code128 举例 格式: GS k n m d1~dn 说明: n=73(49H) 表示采用128码 m表示码长度(含起始码) d1~dn表示码值 [举例]打印条码“No.123456” 本例子中,首先用字符集B打印“No.”,然后使用字符集C打印数字。 GS k 73 10 123 66 78 111 46 123 67 12 34 56(hex: 1D 6B 49 0A 7B 42 4E 6F 2E 7B 43 0C 22 38) */ string ls_token[99]={'01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','65','66','67','68','69','70','71','72','73','74','75','76','77','78','79','80','81','82','83','84','85','86','87','88','89','90','91','92','93','94','95','96','97','98','99'} string ls_bit[99]={'~h01','~h02','~h03','~h04','~h05','~h06','~h07','~h08','~h09','~h0A','~h0B','~h0C','~h0D','~h0E','~h0F','~h10','~h11','~h12','~h13','~h14','~h15','~h16','~h17','~h18','~h19','~h1A','~h1B','~h1C','~h1D','~h1E','~h1F','~h20','~h21','~h22','~h23','~h24','~h25','~h26','~h27','~h28','~h29','~h2A','~h2B','~h2C','~h2D','~h2E','~h2F','~h30','~h31','~h32','~h33','~h34','~h35','~h36','~h37','~h38','~h39','~h3A','~h3B','~h3C','~h3D','~h3E','~h3F','~h40','~h41','~h42','~h43','~h44','~h45','~h46','~h47','~h48','~h49','~h4A','~h4B','~h4C','~h4D','~h4E','~h4F','~h50','~h51','~h52','~h53','~h54','~h55','~h56','~h57','~h58','~h59','~h5A','~h5B','~h5C','~h5D','~h5E','~h5F','~h60','~h61','~h62','~h63'} blob{1} lb_zero blob lb_tmp,lb_start string ls_tmp int i,j int li_rc ab_result = blob("") //判断是否为12位 if len(as_in) <> 12 then return -1 end if //判断传入的数据每位是否数字 For i = 1 To Len(as_in) If Asc(Mid(as_in, i, 1)) < 48 Or Asc(Mid(as_in, i, 1)) > 57 Then return -1 End If end for lb_start = blob("~h1D~h6B~h49~h08~h7B~h43") //开始位为固定格式 ab_result = lb_start //开始计算,每两位一次 for i=1 to 12 step 2 ls_tmp = mid(as_in,i,2) if ls_tmp='00' then ab_result = ab_result + lb_zero else for j=1 to 99 if ls_tmp = ls_token[j] then ab_result = ab_result + blob(ls_bit[j]) exit end if end for end if end for return 0
代码中有一个需要注意的地方是,因为pb无法表示‘~h00’,如果在字符串中直接使用'~h00'会被pb忽略,所以在这里使用了一个1位的blob类型来存储这个'~h00'。
相关文章推荐
- POS58 票据热敏打印机,怎么用ESC/POS命令控制打印文字大小?
- Android进阶――安卓调用ESC/POS打印机打印实例
- POS58票据热敏打印机,怎么用ESC/POS命令控制打印文字大小?
- POS58票据热敏打印机,怎么用ESC/POS命令控制打印
- Android进阶——安卓调用ESC/POS打印机打印
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- ESC/POS打印控制命令
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- Android进阶——安卓调用ESC/POS打印机打印
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】
- C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)
- 网页WB.ExecWB控件打印方法调用说明及参数介绍
- Java调用Linux命令两种方式的例子
- Hive命令的3种调用方式
- 图学PowerBuilder----调用窗口的三种方式
- java调用条码打印机指令进行打印