添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Python调用本地打印机打印PDF文件

最近有个工作需求,需要调用本地打印机打印一批PDF文件,网上找了好多资料,很多都是抄来抄去的,合起来就那么1、2个方法,而且都不够完美,于是自己琢磨了一下,分享给需要的人!

import subprocess
import sys
import os
import win32api
import win32print
# 模块各取所需
def start_printer(cprinter,pdf):
    # """
    # # 调用本地打印机,打印PDF文件,要求:Python3.5+,仅支持win32平台,只支持PDF文件的打印
    # # 方法1:
    # # gswin64c.exe为Ghostscript打印程序安装后bin目录中的一个组件,下载地址:https://www.ghostscript.com/
    # # 方法2:
    # # windows自带打印cmd命令,可以打印安装了相关阅读软件的文件,如打印word文件,需要安装office,环境依赖很严重
    # # 方法3:
    # # SumatraPDF-3.3.3-64.exe(一个mini pdf阅图神器,支持打印)下载地址:https://www.sumatrapdfreader.org/free-pdf-reader
    # # 方法4:
    # # PDFtoPrinter.exe下载地址:http://www.columbia.edu/~em36/pdftoprinter.html,调用cmd,语法简单,小巧好用,但是不支持格式设置,
    # # 听说该软件是PDF-XChange某个封装的组件
    # # 方法5:
    # # PDF-XChange Editor 9.2.359.0.exe,有300多M,下载安装,默认路径
    # # 下载地址:https://www.tracker-software.com/product/pdf-xchange-lite
    # # 安装好了之后会在C:\Users\zhangchunguang\AppData\Local\Temp\PDFPrinterTmp 目录下找到以下文件:
    # # PDFXCview.exe,qpdf28.dll,resource.dat,settings.dat 一共4个文件,可以拷贝走,但需放在一起,使用的时候只需要调用PDFXCview.exe即可
    # :param cprinter: 调用的打印机名称
    # :param pdf: pdf文件的绝对路径
    # :return:
    # """
    # 第一种方法,我用可以,别人用的时候又不行-----
    # if sys.platform == 'win32':
    #     args = [f"{os.path.dirname(__file__)}\plug\gswin64c.exe",
    #             '-sDEVICE=mswinpr2',
    #             '-dBATCH',
    #             '-dNOPAUSE',
    #             '-dFitPage',
    #             f'-sOutputFile="%printer%{cprinter}"',
    #             f'"{pdf}"']
    #     subprocess.run(args, encoding="utf-8", shell=True)
    # 第二种方法,常规通用方法,可以用,但是控制不了颜色,我用的彩色打印机,打出来是彩色和黑白叠加的的,懒得研究了-----
    # win32api.ShellExecute(
    #     0,
    #     "print",
    #     pdf,
    #     '/d:"%s"' % cprinter,
    #     ".",
    #     0
    # 第三种方法,没搞成功,程序也无法自动关闭-----
    # if sys.platform == 'win32':
    #     args = [f"{os.path.dirname(__file__)}\plug\SumatraPDF-3.3.3-64.exe",
    #             '-silent',
    #             '-print-to',
    #             f'{cprinter}',
    #             '-print-settings',
    #             'shrink,monochrome',
    #             '-print-dialog',
    #             "-exit-when-done",
    #             f'{pdf}'
    #             ]
    #     subprocess.run(args, encoding="utf-8", shell=True)
    # 第四种方法,此方法调用独立插件,减少了对系统的环境的依赖-----
    if sys.platform == 'win32':
        args = [f"{os.path.dirname(__file__)}\plug\PDFtoPrinter.exe",
                f"{pdf}",
                f"{cprinter}",
        subprocess.run(args, encoding="utf-8", shell=True)
    print(f"\t|已发送至打印机:{cprinter}")
    # 第五种方法,也可以,但是这个插件包含多个依赖文件,比方法4麻烦----
    # if sys.platform == 'win32':
    #     args = [f"{os.path.dirname(__file__)}\plug\PDFXCview.exe",
    #             f"{pdf}",