大神论坛

找回密码
快速注册
查看: 145 | 回复: 0

[源码] 用python实现pdf合并工具 附源码和成品

主题

帖子

0

积分

初入江湖

UID
642
积分
0
精华
威望
0 点
违规
大神币
68 枚
注册时间
2023-10-14 10:40
发表于 2023-11-18 11:32
本帖最后由 llhongfeng 于 2023-11-18 11:32 编辑

小白自制,大神勿喷,源码如下

import PyPDF2
import os
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox
from threading import Thread


# 创建选择输出文件夹的函数
def select_output_folder():
output_folder_path = filedialog.askdirectory()
output_folder_entry.delete(0, tk.END)
output_folder_entry.insert(0, output_folder_path)


# 创建选择多个PDF文件函数
def select_files_to_merge():
pdf_files = filedialog.askopenfilenames(filetypes=[("PDF files", "*.pdf")])
if pdf_files:
for pdf_file in pdf_files:
pdf_listbox.insert(tk.END, pdf_file)


def delete_selected_files():
selected_indices = pdf_listbox.curselection()
if selected_indices:
for index in selected_indices:
pdf_listbox.delete(index)


def delete_all_files():
pdf_listbox.delete(0, tk.END)


# 合并PDF文件函数
def merge_pdfs():
pdf_files = pdf_listbox.get(0, tk.END) # 获取选定的PDF文件列表
output_folder = output_folder_entry.get()
custom_filename = custom_filename_entry.get()

if not pdf_files:
messagebox.showerror("Error", "没有选择要合并的PDF文件。")
return

def merge_pdfs_in_thread():
output_filename = os.path.join(output_folder, f"{custom_filename}.pdf")

pdf_merger = PyPDF2.PdfMerger()

for pdf_file in pdf_files:
with open(pdf_file, "rb") as pdf:
pdf_merger.append(pdf)

with open(output_filename, "wb") as output_pdf:
pdf_merger.write(output_pdf)

result_label.config(text="PDF文件已成功合并到 " + output_filename)
messagebox.showinfo("Success", "PDF文件已成功合并到 " + output_filename)

# 清空选定框内的所有内容
delete_all_files()

# 清空路径框和文件名框
output_folder_entry.delete(0, tk.END)
custom_filename_entry.delete(0, tk.END)

# 创建线程来执行合并操作,避免图形界面卡顿
merge_thread = Thread(target=merge_pdfs_in_thread)
merge_thread.start()


# 显示使用说明的窗口
def show_instructions_window():
instructions = """使用说明:
1. 选择需要合并的PDF文件,可以多次选择。
2. 选择顺序就是合并顺序,选错可以删除。
3. 选择合并后的位置和合并后的文件名称,点击合并即可。"""

instructions_window = tk.Toplevel(window)
instructions_window.title("使用说明")

instructions_label = tk.Label(instructions_window, text=instructions, justify="left")
instructions_label.pack(padx=10, pady=10)


# 创建主窗口
window = tk.Tk()
window.title("PDF合并工具")
window.geometry("500x620") # 增加主窗口的大小

# 创建使用说明按钮,放在左上角
instructions_button = tk.Button(window, text="使用说明", command=show_instructions_window)
instructions_button.pack(side="top", anchor="nw", padx=10, pady=10)

# 创建选择PDF文件按钮
select_button = tk.Button(window, text="选择需要合并的PDF文件", command=select_files_to_merge)
select_button.pack(padx=10, pady=10)

# 创建一个框架来容纳 PDF 文件列表框和滚动条
frame = tk.Frame(window)
frame.pack(padx=10, pady=5, fill="both", expand=True)

# 创建PDF文件列表框,放在框架内
pdf_listbox = tk.Listbox(frame, selectmode=tk.MULTIPLE)
pdf_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

# 创建一个垂直滚动条
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=pdf_listbox.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
pdf_listbox.config(yscrollcommand=scrollbar.set)

# 创建删除选定文件按钮
delete_button = tk.Button(window, text="删除选定文件", command=delete_selected_files)
delete_button.pack(side="top", anchor="nw", padx=10, pady=10)

# 创建删除全部文件按钮
delete_all_button = tk.Button(window, text="删除全部文件", command=delete_all_files)
delete_all_button.pack(side="top", anchor="nw", padx=10, pady=10)

# 创建选择合并后存放路径按钮
output_select_button = tk.Button(window, text="选择合并后存放路径", command=select_output_folder)
output_select_button.pack(padx=10, pady=10)

# 创建合并后存放路径输入框
output_folder_entry = tk.Entry(window)
output_folder_entry.pack(padx=10, pady=5, fill="x")

# 创建自定义合并文件名输入框
custom_filename_label = tk.Label(window, text="合并后的文件名:")
custom_filename_label.pack(padx=10, pady=10)

custom_filename_entry = tk.Entry(window)
custom_filename_entry.pack(padx=10, pady=10)

# 创建合并按钮,更改按钮颜色
merge_button = tk.Button(window, text="合并PDF", command=merge_pdfs, bg="green", fg="white")
merge_button.pack(side="bottom", anchor="se", padx=10, pady=20)

# 创建结果显示标签
result_label = tk.Label(window, text="")
result_label.pack(padx=10, pady=10)

# 主循环
window.mainloop()



下方隐藏内容为本帖所有文件或源码下载链接:

游客你好,如果您要查看本帖隐藏链接需要登录才能查看, 请先登录

返回顶部