开发背景

接到一个任务,要用热敏打印机打印小票。本人用的是市面上比较常见的佳博热敏打印机。用过票据打印机的人都知道,在小票上打印与普通的打印纸上打印不一样。要通过发送ESCPOS 指令给打印机来完成打印任务,所以控制热敏打印可以看作是用ESCPOS 指令编程。

为此我专门上了佳博的官网,下载了《佳博热敏票据打印机编程手册.pdf》硬着头皮把相关的ESCPOS指令啃了一遍。深感有必要将这些极其不人性化的ESCPOS指令包装一下。为此将常见的打印功能封装成了一个python 类。 需要打印时直接调用该类相应的方法就可以了。如此一来顺利地完成了打印小票的任务。

核心代码

#coding=utf-8#调用usb热敏打印机
#通过rawprint.exe发送打印数据给打印机
#可以发送控制命令与普通文本import time
import random
import os
import uuid#esc指令
escConst ={'esc':27,'gs':29,'lf':10,'dle':16,'eot':4,'enq':5,'dc4':20,'=':61}#当前工作目录
workingDir = os.path.dirname(os.path.abspath(__file__))#将ESC指令转为整数
def escToken2Int(token):token = token.lower()if escConst.has_key(token):return escConst[token]if token.isdigit():return int(token)return ord(token)#将ESC指令串转为列表
def escStr2List(escStr):tmpList = escStr.split(' ')return map(escToken2Int,tmpList)  #将ESC指令串转为可发送给打印机的数据
def escStr2RawData(escStr): return list2RawData(escStr2List(escStr))    #列表转为可发送给打印机的数据
def list2RawData(intList):template = "%s"*len(intList)return template%tuple(map(chr,intList))    #发送打印数据的可执行文件名
exeFile = workingDir +'\\exe\\RawPrint.exe'#模板文件名保留,为以后打印复杂内容做准备
#templateFile = workingDir +'\\template\\temp1.txt'#打印助手类
class PrintHelper:def __init__(self,printerName):self.printerName = printerNameself.reset()#重置,清空缓冲区def reset(self):self.buffer =''  self.appendCmd("esc @")#添加普通文本def appendText(self,data):self.buffer+=data#添加控制命令def appendCmd(self,cmd):self.buffer+=escStr2RawData(cmd)#添加条码,条码宽度现在规定为12位,形如:123456789012def appendBarCode(self,code):if len(code)>12:code = code[0:12]if len(code)<12:code = "0"*(12-len(code))+codetmpCode = code[0:2]+" "+code[2:4]+" "+code[4:6]+" "+code[6:8]+" "+code[8:10]+" "+code[10:]#print tmpCodeself.appendCmd("esc @")self.appendCmd("27 97 2")self.appendCmd("GS w 3")self.appendCmd("GS h 120")self.appendCmd("29 72 2")#GS k 73 8中的8指后面8个字节被视为条码数据,如果数据过多,超过打印宽度则不会打印出条码self.appendCmd("GS k 73 8 123 67 "+tmpCode.strip())self.appendText('\n')#添加列表数据def appendList(self,intlist):self.buffer+=list2RawData(intlist)#将缓冲区中的数据发送到打印机def printTask(self):dataFile = workingDir +'\\data\\'+str(uuid.uuid1())+'.txt' #准备将打印数据写入数据文件 dataHandle =open(dataFile,'w')#控制命令 打印条码dataHandle.write(self.buffer)      dataHandle.close()#让usb打印机执行打印作业cmdLine = exeFile +" "+ self.printerName +" "+ dataFileos.system(cmdLine)os.remove(dataFile)    #删除临时文件#将文件中的数据发送到打印机def printFileTask(self,fileName):dataFile = workingDir +'\\data\\'+fileNamecmdLine = exeFile +" "+ self.printerName +" "+ dataFileos.system(cmdLine)#当前时刻def now(self):return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

实际打印的工作步骤

1, 将打印机通过usb连接到电脑上,本人用的是win10操作系统
2, 安装打印机对应的驱动(打印机附带的光盘上应该有,否则可以上官网上下载)
安装好后应该在设备和打印机界面上看到安装好的打印机

请注意打印机的名字我用红笔标出来了,这台打印机叫iSH58。如果在其它的电脑上,名字可能有不同。Python程序就是根据打印机的名字,找到这台打印机并向它发送ESCPOS指令的。
3,用到了微软提供的一个小工具:RawPrint.exe。这个程序只有28k.它的作用是将原始的打印指令发送给指定的打印机。在我提供的源码里面附带了这个小工具,(也可去微软件的网站上下载http://download.microsoft.com/download/platformsdk/utility/95/win98/en-us/rawprn.exe)
4 ,调用python编写的封装类PrintHelper的各种方法,完成打印工作

下载完整实例

完整实例中不仅包括了上文中的核心类:PrintHelper,还含打印票据的辅助类,打印票据的实际例子程序,打印条形码的例子程序等。感兴趣的请至CSDN下载中心 下载

热敏打印机ESCPOS指令封装类,票据打印从此轻松,佳博系列实测通过相关推荐

  1. 佳博 热敏打印机 ESCPOS 指令研究

    Test.txt内容: 参考打印到文档功能: 初识打印机驱动 http://www.cnblogs.com/MrDing/p/4078189.html 热敏打印头打印原理和C实现黑白位图的放大 htt ...

  2. 蓝牙热敏打印开发(佳博打印机)

    最近在研究蓝牙打印,这是个大坑啊,不同的打印机会有不同的设置,这边用的是佳博的热敏打印机,就以它为例吧. 一,首先,蓝牙打印当然得要连接蓝牙,这边在demo里有两个文件,ConnectViewCont ...

  3. 【Android】Android 集成佳博80打印机打印票据

    文章目录 [Android]Android 集成佳博80打印机打印票据 1.集成佳博80打印机依赖 2.规范调用接口 3.使用到的相关对象以及工具类 4.MainActivity初始化接口 5.Uni ...

  4. uniapp连接佳博打印机实现蓝牙打印票据功能

    开始实现搜索蓝牙.获取蓝牙设备.连接蓝牙设备等操作.代码如下 <template><view class="content"><button clas ...

  5. Android 打印机----》使用android串口以及ESC/POS指令进行小票打印

    开发环境 Android studio 3.5.1 gradle版本3.5.1 android 编译版本 28 jdk1.8 win7 开发准备 对android 串口通信有一定了解 对ESC/POS ...

  6. 票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案...

    票据打印, 账单打印, 标签打印, 文档打印, 条码打印, 批量打印, 包装纸打印与设计,可变数据打印打印,发布,VC++源代码组件库解决方案 使用E-Form++源码库开发任何标签,票据,文档,条码 ...

  7. C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)

     C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持EPSON和北洋.佳博.商祺等支持标准ESC/POS指令的POS打印机 支持并口,串口,网口,USB口,驱动方式等多种端口 支持开关钱箱 ...

  8. Android集成佳博热敏打印机打印小票功能

    一.说明 最近公司项目需要做打印机打印小票功能,首先公司买了一个佳博小票打印机作为测试用机.然后在开发的过程中也遇到一些坑,在此记录一下. 二.集成过程 1. 下载开发文档 首先需要去其官网下载SDK ...

  9. c# 中崎_C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋、佳博、商祺等支持标准ESC/POS指令的POS打印机)...

    C#版OPOS打印(基于北洋OPOS SDK二次开发包,支持EPSON和北洋.佳博.商祺等支持标准ESC/POS指令的POS打印机) 收藏 C#版OPOS打印 基于北洋OPOS SDK二次开发包,支持 ...

  10. web应用票据打印实现(一)

    许多web应用的开发中都会涉及到票据打印的功能.常用的Web打印实现的方式有: 1.浏览器打印接口 调用window.print()方法,调用打印机功能打印当前窗口的内容,与单击浏览器的打印按钮效果一 ...

最新文章

  1. Android Fragment 解析(上)
  2. JSP自定义标签渲染时报Illegal to flush错误
  3. django-ORM单表操作
  4. python获取链接跳转后地址_爬虫:获取多次跳转后的页面url
  5. KIS科目初始数据录入
  6. 【郭林专刊】JSP中JSTL提供的函数标签EL表达式操作字符串的方法
  7. Scala 语言转义字符
  8. redis的五种数据结构
  9. SAP Cloud for Customer My settings按钮被disable的原因分析
  10. c语言程序输出一个桌子图案,几道程序题,请高手帮帮忙吧
  11. Spring事务管理—aop pointcut expression解析
  12. R-CNN学习笔记3:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
  13. VJC案例-风扇定时
  14. RabbitMQ之业务场景(四):动态创建,删除队列工具类,拿来即用
  15. oracle导入文件命令行,Oracle命令行导入dmp文件
  16. python timer详解_Python timer定时器两种常用方法解析
  17. 5款App帮你轻松搞定自定义锁屏
  18. 众海世纪影业:五一档19部影片“扎堆”,能否再次掀起观影热潮?
  19. 跟想这台计算机usb无法识别,跟这台计算机连接的前一个usb设备工作不正常,windows 无法识别它。 这是怎么回事急!!...
  20. matlab 数理统计,概率论和数理统计(matlab应用)1

热门文章

  1. 独立游戏开发(一)-- 安装Unity
  2. Java个人财务管理小软件
  3. 【转】在线翻译、词典、离线工具大全
  4. 一套优秀的直播系统源码是什么样的?起码要有这五个模块
  5. 一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用
  6. Android app 页面加载统计工具
  7. 抖音数据统计_抖音大数据,抖音最全数据分析工具,全知道算你厉害!
  8. 【数学建模】数据包络分析法
  9. 微信小程序上传图片到阿里云存储
  10. Halcon教程七:简单的回形针识别案例