利用Websocket实现网页调用打印功能
来源:互联网 发布:ktv唱歌 知乎 编辑:程序博客网 时间:2024/05/21 20:36
最近项目遇到打印问题,情景是一台机子连着多个打印机,需要打印小样、条码、A4等等,原本以为调用window.print直接了事。可是客户不买帐啊,每次打印不同的文件都要设置不同的打印机,客户直接不干了,没办法,只好给他整。网上搜了好几个打印控件,感觉都不顺心,于是干脆就自己写一个,便想用websocket+pyqt做个打印控件。
直接撸代码吧,python丰富的库直接省了很多事情,使用tornado的websocket+pyqt的QPrinter,几行代码就搞定了
#-*- coding:utf8 -*-import tornado.webimport tornado.ioloopimport tornado.httpserverimport tornado.optionsimport sysfrom tornado.options import define,optionsfrom tornado.websocket import WebSocketHandlerimport jsonfrom PyQt5.QtWidgets import QApplicationfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtPrintSupport import QPrinterInfo,QPrinterdefine("port",default=8889,type=int)def printList(): printerInfo = QPrinterInfo() return printerInfo.availablePrinterNames()def printContent(printer,context,params): printerInfo = QPrinterInfo() p = QPrinter() for item in printerInfo.availablePrinters(): if printer == item.printerName(): print(printer) p = QPrinter(item,QPrinter.PrinterResolution) break p.setPageMargins(0, 0, 0, 0, QPrinter.Pica) p.setFullPage(True) docWidth = params['width']; docHeight = params['height']; orit = params['orientation'] # if orit == "landscape": # p.setOrientation(QPrinter.Landscape) # else: # p.setOrientation(QPrinter.Portrait) print(docWidth * 35) docSize = QSizeF(docWidth * 35,docHeight*35) doc = QTextDocument() doc.setDocumentMargin(5) doc.setPageSize(docSize) #doc.setDefaultFont(QFont("Microsoft YaHei", 4, QFont.Normal)) #doc.setIndentWidth(80) doc.setHtml(u'%s' % context) doc.print(p)def printed(state): print(state)class PrinterHandler(WebSocketHandler): def open(self): pass def on_message(self, message): command = json.loads(message) printype = command['type'] if printype == "print": printer = command['printer'] content = command['content'] params = command['params'] print(printer) try: printContent(printer, content,params) ret = {"code": 200, "msg": "打印成功"} self.write_message(json.dumps(ret)) except Exception as e: ret = {"code":500,"msg":"打印失败,错误信息:" + e} self.write_message(json.dumps(ret)) elif printype == "list": ## TODO:获取打印机列表 ls = printList() ret = {"code":204,"msg":"获取打印机列表成功","data":ls} self.write_message(json.dumps(ret)) def on_close(self): pass def check_origin(self, origin): return True # 允许WebSocket的跨域请求if __name__ == "__main__": tornado.options.parse_command_line() app = QApplication(sys.argv) wapp = tornado.web.Application([(r"/printer",PrinterHandler)]) http_server = tornado.httpserver.HTTPServer(wapp) http_server.listen(options.port) tornado.ioloop.IOLoop.current().start() app.exec_()
贴个git地址^-^
阅读全文
0 0
- 利用Websocket实现网页调用打印功能
- 网页中实现打印功能
- 网页上实现打印功能
- JS实现网页打印功能
- HTML网页打印实现分页打印功能
- 网页调用IE浏览器的打印功能
- 网页调用IE浏览器的打印功能
- 网页调用ie的打印功能
- [Web]网页中实现局部打印功能
- Javascript实现打印局部网页功能
- javaScript实现网页表格打印功能
- Jquery- Jqprint实现网页打印功能
- 网页中调用word实现的打印
- 利用JQuery jqprint实现打印功能
- WebSocket实现网页聊天室
- 利用 Chrome 的打印功能将网页保存为 PDF
- extjs利用第三方打印插件实现打印功能
- javascript调用打印页面接口实现页面打印功能
- ExpandbleListview 二级、三级数据显示,CheckBox 单选、多选
- 数据库事物的四大特性以及事物的隔离级别
- 在github.io上写博客
- SpringMVC 初步
- 学习笔记之 MySQL中优化sql语句查询常用的30种方法
- 利用Websocket实现网页调用打印功能
- information_schema系统表——COLLATION_CHARACTER_SET_APPLICABILITY
- Git use and development(开发和使用)
- 随手笔记
- macos使用U盘安装系统
- flask 重定向(redirect)和会话(session)
- 【Struts2】开发流程
- Spring注解实现定时功能
- map 学习(上)——C++中 map 的使用