Python实现批量加密pdf

admin 2024年3月19日15:24:26评论5 views字数 3714阅读12分22秒阅读模式

Python实现批量加密pdf

实现了一个简单的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的事件循环。

运行效果:

Python实现批量加密pdf

后台回复pdf加密工具获取文章工具

原文始发于微信公众号(蓝胖子之家):Python实现批量加密pdf

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月19日15:24:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Python实现批量加密pdfhttp://cn-sec.com/archives/2581339.html

发表评论

匿名网友 填写信息