背景:
某销售人员经常出差,每个月月底需要进程c报销,每个月都有很多报销文件需要打印。他的习惯是在本地新建一个文件夹报销,然后再在文件夹里对各类型发票进行归类。即文件夹存在子文件夹,有些文件在根目录文件夹里,有些文件在子文件夹里。每个月月底都需要对每个文件进行打印,繁琐的重复性操作。于是乎想写个简单的脚本,输入文件夹目录进行一键打印所有文件。
废话不多说,直接上代码:
import os
import glob
import win32api
import win32print
default_printer = win32print.GetDefaultPrinter() #获取默认打印机名称
def print_pdfs(root_folder):
for filename in glob.iglob(root_folder + '/**/*.pdf', recursive=True):
win32api.ShellExecute(0, "print", filename, default_printer, ".", 0)
root_folder = r"C:\Users\dongdong lin\Desktop\报销\5月"
print_pdfs(root_folder)
-
import os
、import glob
、import win32print
和import win32api
引入了需要用到的模块。 -
def print_pdfs(root_folder)
定义了一个函数,接受一个参数root_folder
,表示要打印PDF文件的根目录。 -
for filename in glob.iglob(root_folder + '/**/*.pdf', recursive=True):
使用glob模块的iglob
函数匹配所有以.pdf
结尾的文件(可以换成其他类型,如.doc
文件),包括子文件夹中的文件。recursive=True
参数使得iglob
在递归遍历文件夹时查找文件。 -
win32api.ShellExecute(0, "print", filename, default_printer, ".", 0)
调用了win32api
模块的ShellExecute
函数,实现打印PDF文件。其中,filename
参数表示要打印的PDF文件路径,default_printer
参数表示要使用的打印机名称,"."
参数表示打印工作目录(这里使用当前目录),0
参数表示打印选项(这里使用默认选项)。
要使用这个脚本,只需要将 /path/to/folder
替换成你要打印PDF文件的文件夹路径即可。请注意,这个脚本仅在 Windows 系统上运行,因为它使用了 win32api
模块。