当前位置: 首页 > web >正文

合并pdf工具下载

csdn上面的下载链接如下
https://download.csdn.net/download/weixin_46756664/91434934?spm=1011.2124.3001.6210
百度网盘链接如下
链接: https://pan.baidu.com/s/1z4lpDGNxKQKW8Zi5A0pgew?pwd=2s9r 提取码: 2s9r
源码如下pdf_merger_app.py(deepseek自动生成的)


import os
import tkinter as tk
from tkinter import filedialog, messagebox, Listbox, Scrollbar, MULTIPLE, END
from PyPDF2 import PdfMergerclass PDFMergerApp:def __init__(self, root):self.root = rootself.root.title("PDF合并工具")self.root.geometry("600x500")# 文件列表self.file_list = []# 创建UI组件self.create_widgets()def create_widgets(self):# 添加文件按钮tk.Button(self.root, text="添加PDF文件", command=self.add_files, height=2, bg="#4CAF50", fg="white").pack(pady=10, fill=tk.X, padx=20)# 文件列表框list_frame = tk.Frame(self.root)list_frame.pack(pady=5, fill=tk.BOTH, expand=True, padx=20)scrollbar = Scrollbar(list_frame)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)self.listbox = Listbox(list_frame, selectmode=MULTIPLE,yscrollcommand=scrollbar.set,height=10)self.listbox.pack(fill=tk.BOTH, expand=True)scrollbar.config(command=self.listbox.yview)# 移除按钮tk.Button(self.root, text="移除选中文件", command=self.remove_files, height=2, bg="#f44336", fg="white").pack(pady=5, fill=tk.X, padx=20)# 输出路径path_frame = tk.Frame(self.root)path_frame.pack(pady=10, fill=tk.X, padx=20)tk.Label(path_frame, text="输出路径:").pack(side=tk.LEFT)self.path_var = tk.StringVar()tk.Entry(path_frame, textvariable=self.path_var, width=40).pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)tk.Button(path_frame, text="浏览", command=self.select_output_path).pack(side=tk.RIGHT)# 输出文件名name_frame = tk.Frame(self.root)name_frame.pack(pady=5, fill=tk.X, padx=20)tk.Label(name_frame, text="输出文件名:").pack(side=tk.LEFT)self.name_var = tk.StringVar(value="merged.pdf")tk.Entry(name_frame, textvariable=self.name_var, width=40).pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)# 合并按钮tk.Button(self.root, text="合并PDF文件", command=self.merge_pdfs, height=2, bg="#2196F3", fg="white", font=("Arial", 12, "bold")).pack(pady=20, fill=tk.X, padx=20)def add_files(self):files = filedialog.askopenfilenames(title="选择PDF文件",filetypes=[("PDF文件", "*.pdf"), ("所有文件", "*.*")])if files:self.file_list.extend(files)self.update_listbox()def remove_files(self):selected = self.listbox.curselection()if selected:# 从后往前删除避免索引变化for index in sorted(selected, reverse=True):del self.file_list[index]self.update_listbox()def update_listbox(self):self.listbox.delete(0, END)for file in self.file_list:self.listbox.insert(END, os.path.basename(file))def select_output_path(self):path = filedialog.askdirectory(title="选择输出文件夹")if path:self.path_var.set(path)def merge_pdfs(self):if not self.file_list:messagebox.showwarning("警告", "请至少添加一个PDF文件!")returnoutput_path = self.path_var.get()if not output_path:messagebox.showwarning("警告", "请选择输出路径!")returnoutput_name = self.name_var.get().strip()if not output_name:messagebox.showwarning("警告", "请输入输出文件名!")returnif not output_name.lower().endswith('.pdf'):output_name += '.pdf'output_file = os.path.join(output_path, output_name)try:merger = PdfMerger()for pdf in self.file_list:merger.append(pdf)with open(output_file, 'wb') as f:merger.write(f)messagebox.showinfo("成功", f"PDF文件合并成功!\n保存位置: {output_file}")except Exception as e:messagebox.showerror("错误", f"合并过程中发生错误:\n{str(e)}")finally:merger.close()if __name__ == "__main__":root = tk.Tk()app = PDFMergerApp(root)root.mainloop()

需要安装的库如下

pip install PyPDF2 tkinter pyinstaller

生成exe脚本如下

pyinstaller --onefile --windowed --name="pdf合并" pdf_merger_app.py 

具体界面如下
在这里插入图片描述

http://www.xdnf.cn/news/16060.html

相关文章:

  • 深入解析Hadoop MapReduce Shuffle过程:从环形缓冲区溢写到Sort与Merge源码
  • Idea或Pycharm上.idea的忽略提交的问题总结
  • 从 C# 到 Python:项目实战第五天的飞跃
  • Linux 721 创建实现镜像的逻辑卷
  • 表单校验--数组各项独立校验
  • mac安装node的步骤
  • uni-app开发小程序,根据图片提取主题色值
  • 查看两个tv and 手机模拟器的ip
  • 修复echarts由4.x升级5.x出现地图报错echarts/map/js/china.js未找到
  • 每日数据推荐:一线城市基于手机信令的职住数据
  • 对称加密技术详解:原理、算法与实际应用
  • 6.String、StringBuffer、StringBuilder区别及使用场景
  • AI Red Teaming 分析
  • GraphRAG快速入门和原理理解
  • 一维DP深度解析
  • Qt5线程相关事项
  • C# 转换(is和as运算符)
  • vue-pinia
  • WebkitSpeechRecognition 语音识别
  • QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释
  • nginx + uwsgi + systemd 部署 flask
  • 在Windows Server 2012 R2中安装与配置IIS服务并部署mssql靶机教程
  • springboot实战篇1
  • 基于 HAProxy 搭建 EMQ X 集群
  • C++的“链”珠妙笔:list的编程艺术
  • 解决vscode中vue格式化后缩进太小的问题,并去除分号 - 设置Vetur tabSize从2到4,设置prettier取消分号semi
  • 计算机发展史:人工智能时代的智能变革与无限可能
  • 基于WebSocket的安卓眼镜视频流GPU硬解码与OpenCV目标追踪系统实现
  • 【PTA数据结构 | C语言版】哥尼斯堡的“七桥问题”
  • C# Lambdab表达式 Var 类