81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
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() |