前言
一、准备搞起来!
今天搞一个“pdf一键自定义拆分脚本”,PDF格式因其良好的跨平台兼容性和视觉保真度而广受欢迎。然而,在处理大量或复杂的PDF文件时,需提取部分页面进行分享、编辑或打印,这就催生了对PDF拆分及自定义合并功能的强烈需求,为了快速的拆分指定的页的内容,用python写了一个小脚本。
二、导入库
1.引入库
第一步当然是先把需要的库统统导进去。(注意,有一些库的版本会有一些区别,如果导致报错的话,可以检查下是不是库的版本不太对。)
import os
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
from PyPDF2 import PdfReader, PdfWriter
2.执行逻辑代码
下面是处理PDF文件代码:
def split_pdf():
file_path = entry.get()
if not file_path:
messagebox.showerror("错误", "请先选择一个PDF文件")
return
mode = var.get()
merge_mode = merge_var.get()
pages = None
if mode == "custom":
input_pages = simpledialog.askstring("输入页码", "请输入要拆分的页码(例如:1, 3-5, 7)")
if input_pages:
pages = []
parts = input_pages.split(',')
for part in parts:
if '-' in part:
start, end = map(int, part.split('-'))
pages.extend(range(start, end + 1))
else:
pages.append(int(part))
else:
return
# 拆分PDF
if not os.path.exists(file_path):
messagebox.showerror("错误", "文件路径不存在,请检查后重试。")
return
reader = PdfReader(file_path)
output_folder = os.path.join(os.path.dirname(file_path), "拆分文件夹")
if not os.path.exists(output_folder):
os.makedirs(output_folder)
if pages is None:
pages = list(range(1, len(reader.pages) + 1))
if merge_mode == "merge":
writer = PdfWriter()
for page_number in pages:
if page_number > len(reader.pages):
continue
writer.add_page(reader.pages[page_number - 1])
output_filename = f"{os.path.splitext(os.path.basename(file_path))[0]}_合并.pdf"
output_path = os.path.join(output_folder, output_filename)
with open(output_path, "wb") as output_pdf:
writer.write(output_pdf)
else:
for page_number in pages:
if page_number > len(reader.pages):
continue
writer = PdfWriter()
writer.add_page(reader.pages[page_number - 1])
output_filename = f"{os.path.splitext(os.path.basename(file_path))[0]}_{page_number}.pdf"
output_path = os.path.join(output_folder, output_filename)
with open(output_path, "wb") as output_pdf:
writer.write(output_pdf)
messagebox.showinfo("完成", "PDF拆分完成。")
3.简易前端的GUI界面
root = tk.Tk()
root.title("PDF 拆分工具")
tk.Label(root, text="选择PDF文件:").pack(side=tk.TOP, pady=10)
entry = tk.Entry(root, width=50)
entry.pack(side=tk.TOP, padx=20)
tk.Button(root, text="浏览", command=select_file).pack(side=tk.TOP, pady=10)
var = tk.StringVar(value="all")
merge_var = tk.StringVar(value="separate")
tk.Radiobutton(root, text="拆分所有页面", variable=var, value="all").pack(side=tk.TOP, anchor=tk.W, padx=20)
tk.Radiobutton(root, text="自定义页码拆分", variable=var, value="custom").pack(side=tk.TOP, anchor=tk.W, padx=20)
tk.Radiobutton(root, text="拆分成单独的PDF", variable=merge_var, value="separate").pack(side=tk.TOP, anchor=tk.W, padx=20)
tk.Radiobutton(root, text="合并成一个PDF", variable=merge_var, value="merge").pack(side=tk.TOP, anchor=tk.W, padx=20)
tk.Button(root, text="开始拆分", command=split_pdf).pack(side=tk.TOP, pady=20)
root.mainloop()
总结
PDF自定义快速拆分脚本,操作便捷高效,功能全面实用。它不仅能将任意多页的PDF文档一键拆分成多个独立的单页PDF文件,让每一页内容都能单独保存、自由分享;同时,还支持灵活自定义拆分模式,随心所欲地选择需要拆分的指定页面,并将其合并输出为新的PDF文件。无论是整理学习资料、优化工作文档,还是个性化编辑,都将为您提供前所未有的便利体验,提升工作效率,尽享自由拆分与合并的乐趣!