python 控制打印机打印文件
一次帮朋友做一个小工具,从excel表格中逐行获取内容插入docx模板中,然后打印出来。前边的功能我在其他帖子里介绍了,就打印一块,单拉出来说一下,以备今后使用参考。
python控制打印机,需要导入两个库 win32api 和 win32print
但是这两个库的安装就不能用pip install了,因为python3.7的库里就没有这两个东西,需要安装pywin32库,这个pywin32库依然不能pip安装。
两个方法,一是去下载离线包,离线安装。二是在pycharm里直接安装。我用第二种。
选择file—setting—project—project interpreter
点右上角的小加号,搜索框里写pywin32,点左下角的install按钮即可。
现在就可以愉快的敲代码了。首先来个简单的
import win32api
import win32print
filename = r'F:\python_programs\模板\缴款通知单.docx'
win32api.ShellExecute(
0,
"print",
filename,
#
# If this is None, the default printer will
# be used anyway.
# 使用默认打印机
'/d:"%s"' % win32print.GetDefaultPrinter(),
".",
0
)
效果是打开这个docx文档然后直接打印,打印完文档也关闭了。就是很多帖子说的,闪一下就没了。怎么不让他闪那么一下,我还没找到方法。估计如果电脑打开word文件本身比较慢的话,打印时等待时间也会比较长,好处是,调用的win32api,肯定能打印出东西来。。。。
说明:filename 是要打印文档的路径和名字,如果该文件和程序在一个文件夹里,可以直接写名字。可以通过os遍历文件夹获取所有的文档名然后批量打印。
再来个麻烦的:
import win32print
import win32ui
import win32con
def print2Printer():
INCH = 1440
hDC = win32ui.CreateDC ()
hDC.CreatePrinterDC (win32print.GetDefaultPrinter ())
hDC.StartDoc ("Test doc")
hDC.StartPage ()
hDC.SetMapMode (win32con.MM_TWIPS)
hDC.DrawText ("TEST HELLO WORLD! CORSS FIREWALL, WE TOUCH THE WORLD!",(0, INCH * -1, INCH * 8, INCH * -2), win32con.DT_CENTER)
hDC.EndPage ()
hDC.EndDoc ()
print2Printer()
这一坨的意识大概是临时创建一个test doc 应该是一个text文件,然后通过 draw text写入一些内容,最后打印出来,如果draw text括号里什么也不写 或者干脆没有这一项,则会空走纸。
具体我还没有时间细作研究,以后有时间补充。