Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来

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

我在一家进口食品供应链企业工作,我的工作内容常常涉及到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、相关图片

Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来_第1张图片

 Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来_第2张图片

Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来_第3张图片 

Python 实现 批量 复制指定PDF文件 到指定文件夹并批量打印出来_第4张图片 

 

 

 

你可能感兴趣的:(python,pycharm,开发语言)