说明

最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机。

商店小票打印,属于escpos打印。

在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实现了。

这里先分享一下我看过的文章和尝试过的方法,最后分享我的实现套路。

一.使用execl打印

很多场景,我都是使用win32com模块的execl打印,基本能解决大部分的打印问题。(相关的方法网上也有,可以找找,如有需要,我有时间单独写一篇)

但使用execl打印热敏小票却不行,会打出整页空白,此路不通,只能放弃。

二. 使用QTextDocument打印

pyqt5自带一套打印工具,也颇为好用。

商店小票,一般思路就是使用QTextDocument,对其setHtml,便能利用html进行排版打印。

这种方法网上很多,但是依然有问题,就是QTextDocument会强制左边和顶部留白。

这里我主要参考了PyQt5中使用Qprinter打印热敏小票一文,大家可以进去看看,非常好的文章。

三 使用ESCPOS打印

热敏小票打印机,都是遵循escpos指令进行打印的,所以我便去找python的escpos模块,还真有。

一个叫python-escpos,使用命令pip install python-escpos 即可安装。
一个叫python-printer-escpos, 使用命令pip install python-printer-escpos 即可安装。

这两个模块,都需要先连接打印机。但我搞了半天,也没有连上,只能放弃。
相关文章,网上也有,自行搜索吧。

四. HTML文件转图片,进行打印

回到PyQt5中使用Qprinter打印热敏小票一文,推荐了html转图片打印的方法,最终作者就是用这种方法实现的。

这种方法,也算解决了QTextDocument强制留白的问题。

我也尝试了一下,但html转图片太过麻烦,而且打印效果不清晰,选择放弃。

五. 使用QWebEngineView进行打印

基于PyQt5中使用Qprinter打印热敏小票一文,继续研究,继续摸索,终于找了我的实现方法,直接使用QWebEngineView进行打印,简单方便。

但有一点缺陷,就是打印效果依旧有点不清晰,后面就通过字体加粗加大来对冲解决。

【如下代码,完全复制,直接运行,即可使用】

  1import win32print  2from PyQt5.QtWidgets import QApplication, QDialog  3from PyQt5.QtCore import QObject, pyqtSlot, QUrl, QSizeF, QMarginsF, QTimer  4from PyQt5.QtWebEngineWidgets import QWebEngineView  5from PyQt5.QtPrintSupport import QPrinter  6import sys  7  8  9################################################ 10the_html=''' 11 12html> 13 14 15     16    使用PyQt5打印热敏小票 17 18    * {padding:0;margin: 0;font-weight:bold;face="KaiTi"} 20    h1 {font-size: 1em} 21    h3 {text-align: center;font-size: 2em} 22    .left {float: left;} 23    .right {float:right;} 24    .clearfix {clear: both;} 25    .print_container {width: 180px;} 26    .section2 label {font-size: 1em;display: block} 27    .section3 label {font-size: 1em;display: block} 28    .section4 .total label {font-size: 1em;display: block} 29    .section4 {text-align: center;font-size: 1em;border-bottom: 1em solid #DADADA} 30    .section5 label {text-align: center;font-size: 1em;display: block} 31 32 33
34    

35        

一心狮便利店

36        *************************************** 37        

38            订单号:700001001201811161631123558 39            下单时间:2018-10-16 16:31:14 40            收银员:王小明 41        

42        *************************************** 43        

44            

45                 46                     47                     48                        商品名 49                        单价 50                        数量 51 52                     53                     54                     55                     56                        今麦郎1 57                        100 58                        10000.00 59                     60                     61                        今麦郎2 62                        1 63                        100.00 64                     65                     66                        今麦郎3 67                        1 68                        100.00 69                     70                     71                 72            

73            

74                合 计 75                100.00 76                 77                收款金额 78                100 79                 80                找零金额 81                0.00 82                 83            

84            

85                顾客已付款 86            

87            *************************************** 88        

89        

90            电话: 91        

92        *************************************** 93        

94            欢迎光临,谢谢惠顾! 95            一心狮便利店 96 97        

98        

99              100              101              102              103              微信扫码 购好物 享服务104        

 105106    

107108

109110111112'''
113
114################################################
115# 打印回调函数
116def print_completed(result):
117    pass
118
119# 开始打印小票
120def goto_print_litbill():
121    webview.page().print(printer, print_completed)
122
123
124################################################
125#######程序入口
126################################################
127if  __name__ == '__main__':
128    app = QApplication(sys.argv)
129    webview = QWebEngineView()
130    webview.setHtml(the_html)
131    #webview.show()
132    win32print.SetDefaultPrinter("DL-581PW(NEW)")  #设置为默认打印机
133    printer = QPrinter()
134    printer.setPageSizeMM(QSizeF(80, 300))
135    ##########必须延迟打印,否则网页还没加载,打印空白#########
136    timer = QTimer()
137    timer.timeout.connect(goto_print_litbill)
138    timer.setSingleShot(True)
139    timer.start(500)
140    ###################################################
141    sys.exit(app.exec_())

本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。

写在最后1

我自己现在用的就是【五. 使用QWebEngineView】进行打印,但不代表其他方法完全不可行,大家根据自己情况自己摸索下。

当然,这种方法依旧存在打印不清晰的缺陷,如果哪位大神有更好的方法,敬请留言推荐,谢谢了。

写在最后2

最后,郑重感谢PyQt5中使用Qprinter打印热敏小票的作者yuchanns。

有了他这篇文章,节省了我好多时间。本文本想收费的,嘿嘿,为感谢yuchanns,就免费分享了,希望也能节省你的时间。如果本文对你有帮助,也请去感谢他吧。

pyqt5 listview 不默认选中_pyqt5 商店小票打印的实现模板相关推荐

  1. python打印小票_pyqt5 商店小票打印的实现模板

    说明 最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机. 商店小票打印,属于escpos打印. 在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实 ...

  2. pyqt5 商店小票打印的实现模板

    说明 最近在用pyqt5做商店小票打印,用的是得力DL-581PW(NEW)热敏小票打印机. 商店小票打印,属于escpos打印. 在网上找了很多实现方法,看了很多相关文章,经历了很多困难,最后终于实 ...

  3. Android打印机--小票打印格式及模板设置

    小票打印就是向打印设备发送控制打印格式的指令集,而这些打印格式需要去查询对应打印机的API文档,这里我把常用的api给封装了一下 文字对齐方式 打印字体大小 字体是否加粗 打印二维码 打印条形码 切纸 ...

  4. vue单选框选中_使用vue如何默认选中单选框

    使用了vue以后,发现这真的是一个灵活高效的框架,能够轻松实现页面的实时刷新. 那么,今天先聊聊单选框的使用.一般我们使用单选框,会这么写: //HTML one two three 有"c ...

  5. struts2 select 默认选中

    jsp: <s:select list="#{'1':'男','2':'女'}" name="sex"/> action: private Stri ...

  6. antd 中 Tree 的使用-默认选中问题

    在使用antd的Tree 控件的控件的时候,数据回显的时候发现所有的都选中了,很奇怪 <Tree checkable ={true}showLine = {true}multiple={true ...

  7. vue checkbox 默认选中

    <div class="form-group" id="rolelist"><div class="col-xs-12"& ...

  8. C# winform combobox默认选中项方法

    https://blog.csdn.net/easyboot/article/details/68062196 可以使用 Combobox.SelectText = "默认选中文本" ...

  9. XtraGrid GridView设置默认选中的行颜色

    表格加载数据后,默认选中第一行,设置背景颜色:Appearance.HideSelectionRow 设置点击时的颜色:Appearance.FocusedRow 恢复外观属性的默认值:Appeara ...

最新文章

  1. 彻底理解 Spring 容器和应用上下文
  2. 爬虫只能用python吗_只针对 Python 爬虫,该如何学习?
  3. ios 在UIView上画图,线条
  4. [Leetcode]141. Linked List Cycle
  5. Android Notification通知详解
  6. mysql duplicate id_mysql 使用ON DUPLICATE KEY UPDATE 时导致的自增主键id无限增大问题
  7. 网易编程题------操作序列
  8. 重磅:向996开炮!携程带头居家办公。
  9. matlab compass函数,Matlab基本函数-compass函数 | 学步园
  10. 关于属性值书写无效问题
  11. Java全套视频教程
  12. 幻灯片更换模板_如何创建Google幻灯片模板
  13. 自定义NDK交叉编译链(toolchain)
  14. 计算机网络基础知识点快速复习手册
  15. mapbox加载天地图
  16. 什么是AJAX?如何实现AJAX异步请求?
  17. CVPR 2023 | 一键去除视频闪烁,该研究提出了一个通用框架
  18. 跨平台C++ Qt数据库管理系统设计与实战:从理论到实践的全面解析
  19. VB6 运行时错误‘374’ 激活控件‘VB.UserControl’失败
  20. c++小项目练习之复数计算器

热门文章

  1. html一个div浮动在另一div上,css – 在另一个DIV的顶部浮动DIV
  2. 构建空列表的两种法是_Python 基础3之列表
  3. python基础教程:函数作用域
  4. Python中_,__,__xx__的区别
  5. Python--unique()与nunique()函数
  6. mysql数据控制语言_mysql数据控制语言DCL(Data Control Language)-数据库
  7. xftp连接海康摄像头报错:sftp子系统申请已拒绝 请确保ssh连接的sftp子系统设置有效
  8. hover如何改变子元素或其他同级元素?(用不了怎么回事?)
  9. pycharm 报黄(黄字、黄色)警告 Local variable 'xxx' might be referenced before assignment
  10. 【中级软考】专利权的保护期限可以延长吗?商标使用权呢?