Here’s a complete Python tool using PyPDF2 and Tkinter to provide a basic graphical user interface (GUI) for splitting and merging PDFs. This script lets users:
-
Split a PDF into individual pages or a page range.
-
Merge multiple PDFs into one file.
pythonimport tkinter as tk
from tkinter import filedialog, messagebox
import PyPDF2
import os
class PDFTool:
def __init__(self, master):
self.master = master
master.title("PDF Split and Merge Tool")
# Buttons
self.split_button = tk.Button(master, text="Split PDF", width=20, command=self.split_pdf)
self.split_button.pack(pady=10)
self.merge_button = tk.Button(master, text="Merge PDFs", width=20, command=self.merge_pdfs)
self.merge_button.pack(pady=10)
def split_pdf(self):
file_path = filedialog.askopenfilename(title="Select PDF to Split", filetypes=[("PDF Files", "*.pdf")])
if not file_path:
return
pdf_reader = PyPDF2.PdfReader(file_path)
total_pages = len(pdf_reader.pages)
range_window = tk.Toplevel(self.master)
range_window.title("Enter Page Range")
tk.Label(range_window, text=f"Enter page range (1-{total_pages}):").pack()
page_range_entry = tk.Entry(range_window)
page_range_entry.pack()
def process_split():
try:
range_text = page_range_entry.get()
if '-' in range_text:
start, end = map(int, range_text.split('-'))
else:
start = end = int(range_text)
if start < 1 or end > total_pages or start > end:
raise ValueError
output_path = filedialog.asksaveasfilename(defaultextension=".pdf",
filetypes=[("PDF Files", "*.pdf")],
title="Save Split PDF As")
if not output_path:
return
pdf_writer = PyPDF2.PdfWriter()
for i in range(start - 1, end):
pdf_writer.add_page(pdf_reader.pages[i])
with open(output_path, "wb") as out_file:
pdf_writer.write(out_file)
messagebox.showinfo("Success", f"PDF split successfully and saved to {output_path}")
range_window.destroy()
except Exception:
messagebox.showerror("Error", "Invalid input. Please enter a valid page range like 1-3 or 2.")
tk.Button(range_window, text="Split", command=process_split).pack(pady=5)
def merge_pdfs(self):
file_paths = filedialog.askopenfilenames(title="Select PDFs to Merge", filetypes=[("PDF Files", "*.pdf")])
if not file_paths:
return
output_path = filedialog.asksaveasfilename(defaultextension=".pdf",
filetypes=[("PDF Files", "*.pdf")],
title="Save Merged PDF As")
if not output_path:
return
pdf_writer = PyPDF2.PdfWriter()
try:
for path in file_paths:
pdf_reader = PyPDF2.PdfReader(path)
for page in pdf_reader.pages:
pdf_writer.add_page(page)
with open(output_path, "wb") as out_file:
pdf_writer.write(out_file)
messagebox.showinfo("Success", f"PDFs merged successfully and saved to {output_path}")
except Exception as e:
messagebox.showerror("Error", f"Failed to merge PDFs: {str(e)}")
if __name__ == "__main__":
root = tk.Tk()
tool = PDFTool(root)
root.mainloop()
Requirements:
Install the required library:
bashpip install PyPDF2
Features:
-
GUI for user-friendly interaction.
-
Page range input for splitting.
-
Multi-select for merging.
Let me know if you want a command-line version, web-based version, or additional features like password protection.
Leave a Reply