python打印电子标签--ghostscript 和reportlab实现

最近公司有一个项目,在仓库中对瓜果蔬菜按照规格打包,打包以后需要称重贴上标签。标签上有条形码,商品编码,商品名称,重量,操作员姓名等信息,这些信息存储在后台数据库中。这本来是一个cs架构的应用,在桌面端查询和显示后台的商品信息,选中商品以后开始称重,称重结果由串口传到桌面前端程序,实时展示。手动触发标签打印按钮,打印机打印标签,操作员把标签贴在包装袋上。

整个项目比较急,一开始定的任务只有我一个人,从开发到测试上线的时间不到两个星期。时间比较紧,从技术的角度来看,并没有什么技术难点,但是涉及到的点比较多,而且都是从来没用过的,比如前端页面用什么来画,实时读取电子称串口数据,打印机静默打印等。

初步调研结果,桌面页面用PyQt5来做,编程语言选用python,打印机型号为DL-620,电子称需要能通过usb将数据传到电脑。

后面觉得开发和测试总的时间太短,对需要用到的库都不熟悉,经过讨论更改方案,方案改为,PyQt5实现页面窗体,页面内容用html实现,业务逻辑在本地使用python实现,用到的技术为PyQT5中自带的WebEngineView,这里涉及到python和html之间的数据交互。(一个项目差不多做完,对PyQt相对也熟悉了一些,其实发现存粹用PyQt来实现也不是很复杂,如果有第二版,则全部用Pyqt来做),电子标签的打印也可以用PyQt中的QtextDocument来实现,不过我这里走了一些弯路,先由代码生成pdf文档,再打印,一开始觉得这样做很简单,没想到难点在于pdf文档的静默打印(调研时看到python调取打印接口就几行代码),结果那些代码打印pdf都会先打开pdf文档,然后再打印,在这个任务中这是不被允许的。必须静默打印,这里花了一天半的时间制作pdf和实现静默打印

这里只是简单的记录一下这个项目,以及项目中用到的一些平时很少用到的包

各个环节用到的包如下:

读取串口数据:serial

桌面界面:PyQT5+Html5,其中涉及到的点有:WebEngineView,WebChannel实现python和html中javascript交互(python调用页面中的javascript和javascript调用python代码),这里没有用django这样的框架,如果使用这个框架应该会更加简单,与页面交互的工作由框架完成了,但是此处是cs架构,一个桌面应用程序,没有服务的概念,所以没有使用

python代码生成pdf文档:reportlab包

静默打印pdf文档:hostscript (gswin32),这个工具很强大,但是涉及到的命令行参数也很多,用法和各参数的详细解读这里有一篇很棒的博客:

ghostscript用法详细介绍

我这里用到的静默打印pdfwen文档命令备忘:

>gswin32c -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNOPROMPT -dNumCopies=1 -sDEVICE=mswinpr2 -dFitPage -dDEVICEWIDTHPOINTS=210 -dDEVICEHEIGHTPOINTS=297 -sOutputFile="%printer%DASCOM DL-620Z" "form_letter.pdf"

各参数解释:

-dPrinted:打印,而不是打开到桌面窗体

-dBATCH:执行到最后一页退出

-dNOPAUSE:每一页转换之间没有停顿

-dNOSAFER:通过命令行运行

-q:-dQUIET:执行过程中尽可能减少日志信息

-dNOPROMPT:没有相关提示

-sDEVICE:指定输出设备

dDEVICEWIDTHPOINTS=210 -dDEVICEHEIGHTPOINTS=297 设置打印纸的大小,默认是a4纸,我这里是标签纸,小得多

先简单记录这个项目,后面开放源码到github

 

 

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中的GhostScript是一种用于处理PDF文件的工具。在Python的图像处理模块PIL(Pillow)中,调用了GhostScript,但由于GhostButt漏洞(CVE-2017-8291),存在远程命令执行漏洞。您可以使用python3-ghostscript==0.5.0这个Python包来安装GhostScript工具包,并将PDF文件转化为图片格式。 另外,在一些开发和测试的项目中,有时也会使用PyQt5和HTML来实现页面窗体和页面内容,通过PyQt5中自带的WebEngineView实现python和html之间的数据交互。对于电子标签打印,也可以使用PyQt中的QtextDocument来实现。在实现pdf文档的静默打印方面,可能会遇到一些困难,因为一些常见的调用打印接口的代码会打开pdf文档后再进行打印。但在某些任务中,静默打印是必需的,因此可能需要花费一些时间来制作pdf并实现静默打印。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python PIL 远程命令执行漏洞(GhostButt )](https://blog.csdn.net/EC_Carrot/article/details/118973388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Ghostscript for windows](https://download.csdn.net/download/weixin_41935140/10708338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python打印电子标签--ghostscriptreportlab实现](https://blog.csdn.net/wolf1132/article/details/84651214)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值