将文件夹下所有文件合并成一个PDF

朋友有个需求,希望将一个项目文件夹下的所有文件,如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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wh3933

你的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值