吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2192|回复: 54
收起左侧

[Python 原创] 自制pdf合并工具

  [复制链接]
XiaoYu121 发表于 2023-11-17 18:42
小白自制,大神勿喷,源码如下

[Python] 纯文本查看 复制代码
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()


打包文件下载:https://lxiaoyu.lanzouj.com/iBKhR1f4wl5e
密码:d7y4

免费评分

参与人数 14吾爱币 +16 热心值 +12 收起 理由
A王爷 + 1 + 1 我很赞同!
digua2020 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
ekobe1796 + 1 谢谢@Thanks!
Yangzaipython + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Katie + 1 我很赞同!
feixue668 + 1 我很赞同!
yanjia5286 + 1 用心讨论,共获提升!
mjst2311 + 1 + 1 谢谢@Thanks!
wangmin + 1 + 1 热心回复!
wkdxz + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Gaara_ + 1 + 1 谢谢@Thanks!
xyg10300 + 1 + 1 我很赞同!
TuJiXiuZaYu + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lvzhu111 发表于 2023-11-17 23:38
测试可用,文件小巧,没广告,收藏了
TuJiXiuZaYu 发表于 2023-11-18 00:45
捕梦 发表于 2023-11-18 01:51
cat183612 发表于 2023-11-18 02:13
win7系统不能用。。。
Wisper12138 发表于 2023-11-18 02:23
感谢分享,很厉害
lyar321 发表于 2023-11-18 05:15
感谢分享
mokson 发表于 2023-11-18 08:01
被360关进了小黑屋。
xyg10300 发表于 2023-11-18 08:05
这个小工具很好用啊感谢楼主
mokson 发表于 2023-11-18 08:05
支持鼠标拖放来改变合并顺序就完美了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 06:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表