最近有一个自动打印的需求,公司业务单据都已经生成了PDF。成员每次都要手动打开PDF选择打印机打印,文件不多的情景下还好说,一天几百份PDF手动打印就很浪费时间。
技术选型上本来打算趁机用Golang练手的,结果半年没碰我已经忘光了Golang的语法,加之业务部天天催促进度,只好拿出多年没用的Python来实现了。
实现原理
首先要说的是,Python并不能直接驱动打印机,大部分都是基于win32print这个库实现的(网上搜索了不少都是这样说的)。因此,我不负责任地猜想:Python要驱动打印机,基本就是利用了window的命令行发送打印指令给对应的打印机。
简单的代码实现
根据猜想和我网上搜索到的答案,要将PDF文件给打印机打印,需要一个第三方工具:PDFtoPrinter 。地址是:www.columbia.edu/~em36/pdfto…
一、任意目录创建一个test.py 文件 (本文基于Python3编写)
二、下载PDFtoPrinter.exe并放在与test.py所在的目录。
三、编辑器打开test.py,输入如下代码。
import subprocess
def command_print(fileName):
command = "{} {}".format('PDFtoPrinter.exe', '%s.pdf' % fileName)
subprocess.call(command, shell=True)
if __name__ == '__main__':
command_print('test')
四、在test.py所在目录下,任意放一份PDF,并名为test.pdf
五、用命令行运行test.py文件,查看打印机是否工作。
如果程序运行出错,请执行pip安装subprocess库。
pip install subprocess
上面我只给出一个可以满足打印PDF的逻辑代码,你需要根据自己的业务情况来调整。例如选择打印机,自动下载PDF文件等等业务细节。
为了让大家便于理解业务逻辑,下图是一个我司业务的流程图:
打包程序
打印程序写好后,需要打包一下程序,否则公司这么多台电脑我都需要给它部署Python的环境明显不符合。
根据网上搜索,程序打包可以选用pyinstaller,具体安装教程我就不说了。
至此,一个简单的Python打印PDF至打印机的小工具就完成了。