Categories We Write About

Create a tool to split and merge PDFs

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.

python
import 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:

bash
pip 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.

Share This Page:

Enter your email below to join The Palos Publishing Company Email List

We respect your email privacy

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Categories We Write About