python实现自动化打印

本文介绍了如何使用Python的win32api和win32print库实现自动化打印PDF文件,避免手动操作的繁琐。作者通过学习和实践,成功编写了一个脚本,能够调用系统打印机打印指定文件,同时探讨了双面打印和其他扩展功能的可能性。
摘要由CSDN通过智能技术生成

这次真的是出于实际需要,想要用python写个小脚本
老板发给我一份包含几百个人信息的pdf文件,如果一份一份打开文件,点打印我感觉要看到眼花。

但是我可是学过python的(虽然面向对象还没有学完),但是调用第三方库是学了呀,如果有别人的代码看看我还是能改改的。

说干就干

查资料,看别人已经写出来的内容

发现调用电脑程序需要用到win32这个库,而且初略的看了下就发现此库非常NB,怎么说,这个库可以同计算机进行交互,比如弹出提示框,或者调用系统内置一些程序。范围太广,而且不是学习目的,以后再讨论。

最终,发现主要用到的两个库是 win32api和win32print(估计这个就是管打印机的)。

安装win32,直接就 pip install pywin32 或者下面这个通过豆瓣镜像安装的
pip install -i http://pypi.douban.com/simple/ pywin32 --trusted-host pypi.douban.com
其他方法类似,pip安装不多说

在查资料,发现基本上都会用到下面这个代码

import win32print
import tempfile
import win32api
def print_file(filename):
    open(filename,"r")
    win32api.ShellExecute(
        0,
        "print",
        filename,
        '/d:"%s"' % win32print.GetDefaultPrinter(),
        ".",
        0
    )

需要注意,这个代码中filename应该是文件路径,具体到文件

eg,要打印11.pdf文件

C:\Users\mik\Desktop\py_word\11.pdf

下面就容易了,写一个得到全部文件内容的代码,然后调用print_file就行了

path = r"C:\Users\mik\Desktop\打印"
for i in os.listdir(path):
    file_path = os.path.join(path,i)
    print("你要打印的文件是%s"%i)
    print_file(file_path)

哈哈,nb,至此大功告成,后来发现,每一个pdf有十几页,而我要把他们都订起来。。。。

下次我可能就要写一个自动订文件打印机的程序了

后记,打印机选择是默认的打印机,我用的是单面打印的打印机,如果是双面打印,可以修改系统默认打印机的设置,这个网上找就行了;我看有的教程需要安装GSPRINT和Ghostscript,并将其添加到系统环境中,但是我并没有安装也可以(如果有特别要求可能要用到“Ghostscript,GhostView”,比如打印特定的页码,这篇文章有涉及可以参考);当然也在于在最后查找文件的时候写一些小范围,比如只打印word之类的。

if i.endswith(“docx”):
print_file(file_path)

2020.10.23

要连接打印机并从Python打印文件,你需要使用Python的第三方库 - `win32print`。以下是一个例子: ```python import win32print import os # 打印机名称,这里使用默认打印机 printer_name = win32print.GetDefaultPrinter() # 要打印的文件路径 file_path = 'C:\\Users\\User\\Documents\\example.txt' # 打印文件 with open(file_path, 'rb') as f: data = f.read() hPrinter = win32print.OpenPrinter(printer_name) try: hJob = win32print.StartDocPrinter(hPrinter, 1, ("example.txt", None, "RAW")) try: win32print.StartPagePrinter(hPrinter) win32print.WritePrinter(hPrinter, data) win32print.EndPagePrinter(hPrinter) finally: win32print.EndDocPrinter(hPrinter) finally: win32print.ClosePrinter(hPrinter) ``` 在这个例子中,我们首先使用 `win32print.GetDefaultPrinter()` 获取默认打印机的名称,并将其保存在变量 `printer_name` 中。然后,我们指定要打印的文件的路径,将其读取为二进制数据,并将其保存在变量 `data` 中。接下来,我们使用 `win32print.OpenPrinter()` 打开打印机,并将其句柄保存在变量 `hPrinter` 中。然后,我们使用 `win32print.StartDocPrinter()` 开始打印作业,并使用 `win32print.StartPagePrinter()` 开始打印页面。我们使用 `win32print.WritePrinter()` 将数据写入打印机,然后使用 `win32print.EndPagePrinter()` 结束打印页面。最后,我们使用 `win32print.EndDocPrinter()` 结束打印作业,并使用 `win32print.ClosePrinter()` 关闭打印机。 请注意,这个例子假定你使用的是Windows操作系统。如果你使用的是Linux或Mac操作系统,则需要使用不同的库和函数来连接打印机并打印文件。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值