import tkinter as tk from tkinter import filedialog, ttk, messagebox from PyPDF2 import PdfReader, PdfWriter import os class PDFPasswordRemover: def __init__(self, root): self.root = root self.root.title("PDF Password Remover") self.root.geometry("600x200") # File Selection Frame file_frame = ttk.LabelFrame(root, text="PDF File Selection", padding=10) file_frame.pack(fill=tk.X, padx=5, pady=5) self.file_path = tk.StringVar() ttk.Entry(file_frame, textvariable=self.file_path, width=60).pack(side=tk.LEFT, padx=5) ttk.Button(file_frame, text="Browse", command=self.browse_file).pack(side=tk.LEFT) # Password Frame pass_frame = ttk.LabelFrame(root, text="Password", padding=10) pass_frame.pack(fill=tk.X, padx=5, pady=5) self.password = tk.StringVar() ttk.Entry(pass_frame, textvariable=self.password, show="*", width=30).pack(side=tk.LEFT, padx=5) # Buttons button_frame = ttk.Frame(root, padding=10) button_frame.pack(fill=tk.X, padx=5) ttk.Button(button_frame, text="Remove Password", command=self.remove_password).pack(side=tk.LEFT, padx=5) ttk.Button(button_frame, text="Exit", command=root.quit).pack(side=tk.RIGHT) def browse_file(self): filename = filedialog.askopenfilename( title="Select PDF file", filetypes=[("PDF files", "*.pdf"), ("All files", "*.*")] ) if filename: self.file_path.set(filename) def remove_password(self): if not self.file_path.get(): messagebox.showerror("Error", "Please select a PDF file") return try: # Read PDF reader = PdfReader(self.file_path.get()) # Check if PDF is encrypted if reader.is_encrypted: # Try to decrypt with provided password reader.decrypt(self.password.get()) # Create writer writer = PdfWriter() # Add pages to writer for page in reader.pages: writer.add_page(page) # Get output filename output_file = os.path.splitext(self.file_path.get())[0] + "_unlocked.pdf" # Save decrypted PDF with open(output_file, "wb") as output_pdf: writer.write(output_pdf) messagebox.showinfo("Success", f"Password removed successfully!\nSaved as: {output_file}") except Exception as e: messagebox.showerror("Error", f"Error: {str(e)}") def main(): root = tk.Tk() app = PDFPasswordRemover(root) root.mainloop() if __name__ == "__main__": main()