朋友有个需求,希望将一个项目文件夹下的所有文件,如pdf、doc、图片等,一次都合并成一个pdf文件,方便文件管理保存
抽空给写了代码,比较简单,大神勿笑,有更好的方案,可以交流哈
做了个很简单的UI,没有打包
import os
import os.path
from PyPDF2 import PdfFileReader, PdfMerger
import tkinter as tk
from tkinter import filedialog, messagebox
# 定义一个函数,用来选择原始文件夹
def select_source_folder():
global source_folder # 使用全局变量保存原始文件夹路径
source_folder = filedialog.askdirectory() # 弹出对话框让用户选择文件夹
if source_folder: # 如果用户选择了文件夹
source_label['text'] = source_folder # 更新标签显示文件夹路径
# 定义一个函数,用来选择目标文件夹
def select_target_folder():
global target_folder # 使用全局变量保存目标文件夹路径
target_folder = filedialog.askdirectory() # 弹出对话框让用户选择文件夹
if target_folder: # 如果用户选择了文件夹
target_label['text'] = target_folder # 更新标签显示文件夹路径
# 定义一个函数,用来执行合并PDF的任务
def merge_pdfs():
global source_folder, target_folder # 使用全局变量获取原始文件夹和目标文件夹路径
if not source_folder or not target_folder: # 如果有任何一个文件夹路径为空
messagebox.showerror('错误', '请先选择原始文件夹和目标文件夹') # 弹出错误提示框
return # 结束函数
# 初始化PdfMerger对象
pdf_merger = PdfMerger()
# 遍历原始文件夹中的每个子文件夹
for sub_folder in os.listdir(source_folder):
sub_folder_path = os.path.join(source_folder, sub_folder)
if not os.path.isdir(sub_folder_path):
continue
# 遍历当前子文件夹中的每个PDF文件
for pdf_file in os.listdir(sub_folder_path):
pdf_file_path = os.path.join(sub_folder_path, pdf_file)
if not pdf_file_path.endswith('.pdf'):
continue
# 将当前PDF文件添加到PdfMerger对象中
with open(pdf_file_path, 'rb') as f:
pdf_merger.append(f)
# 将所有PDF文件合并为一个文件,保存在目标文件夹中,名字为merged.pdf
merged_pdf_path = os.path.join(target_folder, 'merged.pdf')
with open(merged_pdf_path, 'wb') as f:
pdf_merger.write(f)
# 关闭PdfMerger对象
pdf_merger.close()
messagebox.showinfo('完成', '所有PDF文件已合并') # 弹出完成提示框
# 创建Tkinter窗口对象
window = tk.Tk()
window.title('PDF合并器') # 设置窗口标题
# 创建一个标签,用来显示原始文件夹路径
source_label = tk.Label(window, text='请选择原始文件夹')
source_label.pack()
# 创建一个按钮,用来选择原始文件夹
source_button = tk.Button(window, text='选择原始文件夹', command=select_source_folder)
source_button.pack()
# 创建一个标签,用来显示目标文件夹路径
target_label = tk.Label(window, text='请选择目标文件夹')
target_label.pack()
# 创建一个按钮,用来选择目标文件夹
target_button = tk.Button(window, text='选择目标文件夹', command=select_target_folder)
target_button.pack()
# 创建一个按钮,用来开始合并PDF任务
start_button = tk.Button(window, text='开始合并', command=merge_pdfs)
start_button.pack()
# 进入Tkinter主循环,等待用户操作
window.mainloop()