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

工具分享05 | Python制作PDF合并拆分提取工具V1.0

文章目录

  • 🏳️‍🌈 1. 运行流程
    • 1.1 工具面板
    • 1.2 PDF文件拆分
    • 1.3 PDF文件合并
    • 1.4 提取PDF页面
    • 1.5 按PDF文件名排序
    • 1.6 按PDF文件大小排序
    • 1.7 按PDF文件页数排序
  • 🏳️‍🌈 2. 绘制
    • 2.1 框架结构布局
    • 2.2 添加菜单
    • 2.3 文件选择部分
    • 2.4 添加文件
    • 2.5 文件操作
  • 🏳️‍🌈 3. 更多可视化项目源码+数据

大家好,我是 👉 【Python当打之年(点击跳转)】

本期使用Python的Tkinter制作 PDF合并拆分提取工具,主要功能:

  • 合并功能:将列表中的PDF文件按顺序合并成一个新的PDF文件,可以设置输出文件名称。
  • 拆分功能:拆分单个PDF文件,生成多个新的PDF文件,支持多种页码范围格式(如 “1-3,5,7-9”),可以设置输出目录。
  • 提取功能:提取PDF文件中指定范围页码,生成一个新的PDF文件,同样支持多种页码范围格式(如 “1-3,5,7-9”),可以设置输出文件名称。
    希望对大家有所帮助,如有疑问或者需要改进的地方可以联系小编。

往期分享:
工具分享04 | Python高级图片处理工具
工具分享03 | Python屏幕点击抢票工具,告别拼手速时代
工具分享02 | Python批量文件重命名工具
工具分享01 | Python福彩双色球数据爬取+分析工具

🏳️‍🌈 1. 运行流程

1.1 工具面板

在这里插入图片描述

1.2 PDF文件拆分

在这里插入图片描述

会根据设置的页码范围将PDF文件拆分成几个文件。
例如设置的 1-3,5,7-9 指的是:将文件拆分成第1-3页一个文件,第5页一个文件,第7-9页一个文件,其余部分一个文件,这里一共生成4个文件。

结果:
在这里插入图片描述

打开开看页数:
在这里插入图片描述

1.3 PDF文件合并

在这里插入图片描述
这里使用前面拆分的文件:编码规范中文版_pages_1-3.pdf,编码规范中文版_pages_7-9.pdf,文件页数均为3页,合并后文件页数应为6页

结果:
在这里插入图片描述
打开开看页数:
在这里插入图片描述

1.4 提取PDF页面

在这里插入图片描述
这里我们提取第1-10页:
在这里插入图片描述
打开开看页数:
在这里插入图片描述

1.5 按PDF文件名排序

在这里插入图片描述

1.6 按PDF文件大小排序

在这里插入图片描述

1.7 按PDF文件页数排序

在这里插入图片描述

🏳️‍🌈 2. 绘制

2.1 框架结构布局

def create_widgets(self):"""创建所有界面组件"""# 主框架self.main_frame = ttk.Frame(self.root, padding="15", style="MainFrame.TFrame")self.main_frame.pack(fill=tk.BOTH, expand=True)# 创建菜单self.create_menu()# 文件选择部分self.create_file_section()# 功能选择部分self.create_function_section()# 按钮框架self.button_frame = ttk.Frame(self.main_frame, style="MainFrame.TFrame")self.button_frame.pack(pady=(15, 0), fill=tk.X)self.execute_button = ttk.Button(self.button_frame,text="执行",command=self.start_operation,style="Green.TButton",)self.execute_button.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0, 10))self.cancel_button = ttk.Button(self.button_frame,text="取消",command=self.cancel_operation,style="Red.TButton",state=tk.DISABLED)self.cancel_button.pack(side=tk.LEFT, fill=tk.X, expand=True)# 进度条self.progress = ttk.Progressbar(self.main_frame,orient=tk.HORIZONTAL,length=100,mode='determinate',style="Horizontal.TProgressbar",)self.progress.pack(fill=tk.X, pady=(10, 0))# 状态栏self.status_var = tk.StringVar(value="准备就绪!")self.status_bar = ttk.Label(self.root,textvariable=self.status_var,padding=[15,5])self.status_bar.pack(fill=tk.X, side=tk.BOTTOM)

2.2 添加菜单

def create_menu(self):"""创建菜单系统"""menu_bar = tk.Menu(self.root)file_menu = tk.Menu(menu_bar, tearoff=0)help_menu.add_command(label="联系作者", command=self.about_command)menu_bar.add_cascade(label="帮助", menu=help_menu)self.root.config(menu=menu_bar)

2.3 文件选择部分

def create_file_section(self):"""创建文件选择部分"""file_frame = ttk.LabelFrame(self.main_frame,text="PDF 文件",padding="10",style="Bold.TLabelframe")file_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 15))list_frame = ttk.Frame(file_frame)list_frame.pack(fill=tk.BOTH, expand=True)self.file_tree = ttk.Treeview(list_frame,columns=('size', 'pages', 'path'),show='headings',selectmode='extended')self.file_tree.heading('size', text=' 大小', anchor=tk.W)self.file_tree.heading('pages', text=' 页数', anchor=tk.W)self.file_tree.heading('path', text=' 路径', anchor=tk.W)self.file_tree.column('size', width=80, anchor=tk.W)self.file_tree.column('pages', width=60, anchor=tk.W)self.file_tree.column('path', width=400, anchor=tk.W)self.file_tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

2.4 添加文件

def add_files(self):"""添加PDF文件到列表"""files = filedialog.askopenfilenames(title="选择 PDF 文件",filetypes=[("PDF 文件", "*.pdf"), ("所有文件", "*.*")])if files:new_files = [f for f in files if f notin self.pdf_files]ifnot new_files:self.update_status("没有添加新文件")returnself.pdf_files.extend(new_files)self.update_file_list()self.update_status(f"已添加 {len(new_files)} 个文件 (总共 {len(self.pdf_files)} 个)")

2.5 文件操作

def merge_pdfs(self):output_path = filedialog.asksaveasfilename(title="保存 PDF",defaultextension=".pdf",filetypes=[("PDF 文件", "*.pdf")],initialfile=self.output_name.get())ifnot output_path or self.operation_cancelled:self.update_status("操作已取消")returntry:merger = PdfMerger()total_files = len(self.pdf_files)success_count = 0for i, pdf_file in enumerate(self.pdf_files):if self.operation_cancelled:breaktry:with open(pdf_file, 'rb') as f:merger.append(f)success_count += 1except PdfReadError:self.update_status(f"警告: 无法读取文件 {os.path.basename(pdf_file)} - 已跳过")continueexcept Exception as e:self.update_status(f"警告: 处理文件 {os.path.basename(pdf_file)} 时出错 - {str(e)} - 已跳过")continueif self.operation_cancelled:self.update_status("操作已取消")self.reset_progress()returnif success_count == 0:self.update_status("处理失败 - 没有有效的PDF文件")self.reset_progress()returnwith open(output_path, 'wb') as output_file:merger.write(output_file)merger.close()except Exception as e:ifnot self.operation_cancelled:messagebox.showerror("错误", f"{str(e)}")self.update_status("处理 PDF 时出错")

🏳️‍🌈 3. 更多可视化项目源码+数据

点击跳转:【全部可视化项目源码+数据】


以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享注明出处)让更多人知道。

http://www.dtcms.com/a/320907.html

相关文章:

  • Linux 学习 ------Linux 入门(上)
  • trae开发c#
  • Android 中 实现自定义 Dialog 提示框
  • @CacheConfig​​当前类中所有缓存方法详解
  • Go语言实战案例:简易JSON数据返回
  • Linux多线程——生产者消费者模型
  • 芯科科技成为全球首家通过PSA 4级认证的物联网芯片厂商巩固其在物联网安全领域的领导地位
  • 从零开始构建【顺序表】:C语言实现与项目实战准备
  • 《汇编语言:基于X86处理器》第12章 浮点数处理与指令编码(2)
  • 【JavaEE】(10) JavaEE 简介
  • 虚幻基础:场景actor与角色的碰撞
  • 走进Linux世界:make和makefile
  • 深入浅出线程池ThreadPoolExecutor
  • 机器人焊机智能流量调节
  • SwiftUI中的键盘快捷键、初始页面控制及网络权限管理解析
  • linux-LVM 逻辑卷管理
  • Windows域控制器部署最佳实践
  • (1-9-1) Maven 特性、安装、配置、打包
  • 安全扫描:检测到目标站点存在javascript框架库漏洞问题(vue)
  • DQL 超维分析 - 5 集算器 DQL
  • 【网络】TCP/UDP协议
  • 通过上下文工程优化LangChain AI Agents(二)
  • 佳维视高亮度工业显示器,强光环境清晰可见
  • 从深度伪造到深度信任:AI安全的三场攻防战
  • 饿了么零售 sign 分析
  • WPF 动画卡顿
  • 技术速递|GPT-5 正式上线 Azure AI Foundry
  • [激光原理与应用-176]:测量仪器 - 频谱型 - AI分类与检测相对于传统算法的优缺点分析
  • 人工智能与智能家居:家居生活的变革
  • sqlite的sql语法与技术架构研究