首先从我的工作特点出发,介绍如果通过编程实现繁琐的工作简单化。

我在一家进口食品供应链企业工作,我的工作内容常常涉及到PDF文件的打印,比如:报关单,上回我分享了两篇文章,关于 EXCEL - VBA代码的实现批量打印PDF打印文件的文章:1、EXCE-VBA-批量打印单元格内指定文件名的文件;2、批量打印PDF文件 Excel VBA;今天还是围绕打印PDF文件的,不过这次是用 Python代码实现。

Python和Pycharm的安装我这里就直接跳过,搜索一下有很多教程的,Pycharm用免费版就可以了。

首先,实现方式完全是按照自己的想法来的,每个公司都自己的系统或者表格记录着公司的重要信息,然而我们通过系统或者表格筛选出需要的数据后,通过复制相关信息后运行python程序后,程序会根据所复制的内容,在指定的文件夹内检索相关PDF文件,进行PDF文件的复制和打印。

我们用到的库有以下,安装方法可以通过Win R,运行:CMA,输入pip install 库名安装;或者 通过Pycharm的的文件-设置-python解释器 搜索安装,搜索一下有很多教程的;

import os import shutil from tkinter import * from tkinter import filedialog import glob import pyperclip import win32api,win32con,win32print

定义def函数:

1、用于存放复制过来的PDF文件,这个文件夹我叫它“需打印的报关单”(我的电脑桌面路径是:C:\Users\Administrator\Desktop),主要功能就是判断一下这个文件夹是否存在,不存在就直接创建,已存在的话弹出提示框;

def mkdir(): # 文件夹是否存在处理过程 isexists = os.path.exists("C:\\Users\\Administrator\\Desktop\\需打印的报关单") # 判断路径是否存在 # 存在True # 不存在False if not isExists: # 判断 os.makedirs("C:\\Users\\Administrator\\Desktop\\需打印的报关单") # 不存在创建文件夹 return True else: #存在就弹出提示框 win32api.MessageBox(0, "帅哥美女:桌面已经有所需的文件夹了,文件夹内可能有之前的文件,请妥善处理后再点击 确认 。", "小叶提醒", win32con.MB_ICONASTERISK)

2、定义打印PDF文件指令,自动选择 电脑默认打印机;

def print_file(print_file): #定义打印PDF文件指令,自动选择 电脑默认打印机 open(print_file,"r") win32api.ShellExecute( 0, "print", print_file, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0 )

3、程序入口,已标注得非常清楚,这里就不再扒拉巴拉了;

if __name__ == '__main__': a = 0 #定义一个变量,赋值为0,这个变量用于统计打印报关单的份数 mkdir() #调用函数 def mkdir(): 文件夹是否存在处理过程 path0 = "C:\\Users\\Administrator\\Desktop\\需打印的报关单\\" #定义一个变量,将创建的文件夹路径赋值给它 path2 = pyperclip.paste() #定义一个变量,存放获取的剪切板数据 filelist0 = path2.split("\r\n") #定义一个变量,存放列表化的剪切板数据 if not path2: #剪切板为空的时候弹出提示框 win32api.MessageBox(0, "帅哥美女:没有复制到柜号 或者 复制了其他无关内容,请重新到Excel表格复制柜号。", "小叶提醒QQ308699402", win32con.MB_ICONASTERISK) root = Tk() #创建一个窗体,通过这个窗口选择指定的目标文件夹,目标文件夹存放着很多PDF文件,我们要通过这个程序在这个文件夹中筛选出需要的文件 root.withdraw() # 隐藏主窗口 path1 = filedialog.askdirectory() #定义一个变量,存放存放目标文件夹内容 filelist1 = os.listdir(path1) #定义一个变量,存放文件内容列表化数据 for aa in filelist0: #将列表化的剪切板数据一个一个的循环赋值给 aa for bb in filelist1: #将文件内容列表化数据一个一个的循环赋值给 bb bb1 = bb[0:7] #过滤文件名 bb2 = bb[3:10] #过滤文件名 bb3 = bb[-13:-6] #过滤文件名 bb4 = bb[-14:-7] #过滤文件名 if bb1 == aa or bb2 == aa or bb3 == aa or bb4 == aa: #判断过滤后的文件名与剪切板数据是否一致,直到全部剪切板数据比对完成 aa for cc in glob.glob(path1 "/*" aa "*关*.pdf"): #循环选取一致的文件 shutil.copy(cc,path0) #复制PDF文件到需打印的报关单文件夹 win32api.MessageBox( #批次量打印前的一次重要提醒,点击 确认 便开始打印复制好的PDF文件 0, "帅哥美女:\n" "电脑自动选择默认打印机\n" "请检查打印机里面的纸张是否全部都是白纸,白纸是否足够\n" "点击 确定 后开始打印文件夹内的报关单", "小叶提醒QQ308699402", win32con.MB_ICONASTERISK) desktop_path = "C:\\Users\\Administrator\\Desktop\\" #定义一个变量,赋值一个路径,用于存放打印结果 full_path = desktop_path '已打印的报关单详细清单.txt' # 创建一个txt文件,也可以创建一个.doc的word文档 file = open(full_path, 'w') #打开txt文档,写入数据 file.write("已打印的报关单有:\n") for i in os.listdir(path0): #循环打印报关单,直到 文件夹需打印的报关单里的全部文件加载到打印 file_path = os.path.join(path0, i) print_file(file_path) #调用打印PDF文件指令函数 a = 1 #打印计数 file.write(str(i) "\n") #已打印的文件名 file.write("一共打印了" str(a) "份报关单,请等待打印机完成全部打印!!!") file.close() #写入关闭

大功告成,运行一下吧!

注意:

1、电脑必须安装Adobe的PDF阅读器,并且将Adobe的PDF阅读器必须设为置为PDF文件的默认打开方式,否则程序会报错(error: (31, 'ShellExecute', '连到系统上的设备没有发挥作用。'))

2、运行前先复制好数据;

3、相关图片

快速写入pdf文字的python代码(Python实现批量)(1)

快速写入pdf文字的python代码(Python实现批量)(2)

快速写入pdf文字的python代码(Python实现批量)(3)

快速写入pdf文字的python代码(Python实现批量)(4)

,