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括号里什么也不写 或者干脆没有这一项,则会空走纸。
具体我还没有时间细作研究,以后有时间补充。