实现了一个简单的PDF加密工具,可以方便地加密PDF文件夹内的所有PDF文件
代码:
import tkinter as tk from tkinter import filedialog, messagebox, ttk import os import configparser import PyPDF2 # 初始化TKinter根窗口 root = tk.Tk() root.title('PDF批量加密工具---微信公众号:蓝胖子之家') root.configure(bg='#1c1c1c') # 自定义样式 style = ttk.Style() style.theme_use('clam') style.configure('TButton', background='#00ff00', foreground='#1c1c1c', font=('Courier', 12, 'bold')) style.map('TButton', background=[('active', '#00b300')]) style.configure('TEntry', font=('Courier', 12), padding=10, background='#1c1c1c', foreground='#00ff00') style.configure('TLabel', font=('Courier', 12), foreground='#00ff00', background='#1c1c1c') style.configure('TitleLabel.TLabel', font=('Courier', 16, 'bold'), foreground='#00ff00') # 读取配置文件 config = configparser.ConfigParser() config.read('config.ini') last_password = config.get('Settings', 'LastPassword', fallback='') def select_directory(entry_widget): """选择文件夹并更新对应的输入框""" dir_path = filedialog.askdirectory() if dir_path: entry_widget.delete(0, tk.END) entry_widget.insert(0, dir_path) def encrypt_pdfs(pdf_folder, save_path, password): """加密PDF文件夹内的所有PDF文件""" for filename in os.listdir(pdf_folder): if filename.lower().endswith('.pdf'): pdf_path = os.path.join(pdf_folder, filename) try: with open(pdf_path, 'rb') as file: pdf_reader = PyPDF2.PdfReader(file) pdf_writer = PyPDF2.PdfWriter() for page in pdf_reader.pages: pdf_writer.add_page(page) pdf_writer.encrypt(password) new_file_path = os.path.join(save_path, filename) with open(new_file_path, 'wb') as new_file: pdf_writer.write(new_file) except Exception as e: messagebox.showerror('Error', f'Error processing file {filename}: {e}') return False return True def on_encrypt_button_click(): """处理加密按钮点击事件""" pdf_folder = entry_pdf_path.get() save_path = entry_save_path.get() password = entry_password.get() if not pdf_folder or not save_path or not password: messagebox.showerror('Error', '请输入设置的密码') return # 确保节存在,如果不存在则创建 if not config.has_section('Settings'): config.add_section('Settings') # 更新配置文件 config.set('Settings', 'LastPassword', password) with open('config.ini', 'w') as config_file: config.write(config_file) if encrypt_pdfs(pdf_folder, save_path, password): messagebox.showinfo('Done', '已加密所有PDF文件') # 创建GUI布局 title_label = ttk.Label(root, text='PDF批量加密工具', style='TitleLabel.TLabel') title_label.grid(row=0, column=0, columnspan=3, padx=20, pady=20) fields = ['PDF源文件夹::', '保存PDF路径', '设置密码:'] entries = [] for i, field in enumerate(fields): label = ttk.Label(root, text=field) label.grid(row=i+1, column=0, sticky='e', padx=20, pady=10) entry = ttk.Entry(root, width=50) entry.grid(row=i+1, column=1, padx=20, pady=10) if field == 'Set Password:': entry.insert(0, last_password) entries.append(entry) entry_pdf_path, entry_save_path, entry_password = entries ttk.Button(root, text='浏览', command=lambda: select_directory(entry_pdf_path)).grid(row=1, column=2, padx=20, pady=10) ttk.Button(root, text='浏览', command=lambda: select_directory(entry_save_path)).grid(row=2, column=2, padx=20, pady=10) ttk.Button(root, text='加密', command=on_encrypt_button_click).grid(row=4, column=1, padx=20, pady=20) # 运行GUI root.mainloop()
首先,我们导入了需要的库和模块,包括Tkinter、filedialog、messagebox、ttk、os、configparser和PyPDF2。
然后,我们初始化了一个Tkinter根窗口,并设置了窗口的标题和背景颜色。
接下来,我们定义了一些自定义样式,包括按钮、输入框和标签的样式。
然后,我们读取了配置文件config.ini中的上次使用的密码,并将其作为默认值填充到密码输入框中。
接下来,我们定义了一个函数select_directory,用于选择文件夹并更新对应的输入框。
然后,我们定义了一个函数encrypt_pdfs,用于加密PDF文件夹内的所有PDF文件。在这个函数中,我们遍历文件夹内的所有文件,如果文件是PDF文件,则使用PyPDF2库打开文件,并创建一个新的PDF写入器。然后,我们遍历原始PDF文件的每一页,并将其添加到新的PDF写入器中。最后,我们使用设置的密码对新的PDF文件进行加密,并将其保存到指定的路径。
接下来,我们定义了一个函数on_encrypt_button_click,用于处理加密按钮的点击事件。在这个函数中,我们获取输入框中的PDF文件夹路径、保存路径和密码。如果其中有任何一个输入框为空,则弹出错误提示框。然后,我们更新配置文件中的密码,并调用encrypt_pdfs函数来加密PDF文件夹内的所有PDF文件。如果加密成功,则弹出提示框显示完成信息。
接下来,我们创建了GUI布局。我们使用ttk.Label创建了一个标题标签,并使用ttk.Entry创建了三个输入框。然后,我们使用ttk.Button创建了两个浏览按钮和一个加密按钮,并将它们与对应的函数绑定。
最后,我们运行了GUI,通过调用root.mainloop()来启动GUI的事件循环。
运行效果:
后台回复pdf加密工具获取文章工具
原文始发于微信公众号(蓝胖子之家):Python实现批量加密pdf
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论