Python 批量删除|添加 PDF 文件的密码 PDF密码 添加解密加密删除

起因是最近在网上收集了一些 PDF 资料,但是分享资源的人给每个 PDF 文件都加了密码,这就很麻烦了,每次查看都要输入密码,如果手动去除密码又需要耗费一些时间,幸好 Python 中有个 PyPDF2 库,用它可以很方便的去除 PDF 中的密码,最终在 GPT 的帮助下我写出了一个批量去除的脚本。

91dad7e5e723ab5eff67f3bc4ba5ea46

在使用前需要安装 PyPDF2 库:

pip install PyPDF2

如果出现报错,则是因为 PyPDF2 需要 PyCryptodome 库来处理 AES 算法,需要安装 PyCryptodome 库

pip install pycryptodome

保存下面代码为 py 文件,执行后根据提示输入路径和密码就 OK 了,如果目录的 pdf 文件没有密码会自动跳过:

import os
from PyPDF2 import PdfReader, PdfWriter
from colorama import init, Fore
 
init()
 
def remove_password(input_file, output_file, password):
    print(Fore.CYAN + "正在删除密码:", input_file)
    with open(input_file, "rb") as f:
        pdf_reader = PdfReader(f)
        if pdf_reader.is_encrypted:
            try:
                pdf_reader.decrypt(password)
                print(Fore.GREEN + "密码删除成功.")
            except Exception as e:
                print(Fore.RED + f"Error removing password: {e}")
                return
        else:
            print(Fore.YELLOW + "文件未加密,跳过...")
 
        # 将解密的内容写入新的pdf文件
        pdf_writer = PdfWriter()
        for page_num in range(len(pdf_reader.pages)):
            pdf_writer.add_page(pdf_reader.pages[page_num])
 
        # 如果输出目录不存在则创建目录
        os.makedirs(os.path.dirname(output_file), exist_ok=True)
 
        with open(output_file, "wb") as out_f:
            pdf_writer.write(out_f)
 
        print(Fore.CYAN + "已解密的PDF文件已保存到:", output_file ,"\n")
 
if __name__ == "__main__":
    input_directory = input("输入包含加密PDF文件的目录: ")
    output_directory = input("输入保存解密后的 PDF 文件的目录: ")
    password = input("输入解密 PDF 文件的密码: ")
 
    if not os.path.isdir(input_directory):
        print(Fore.RED + f"Error: Input directory '{input_directory}' not found.")
        exit(1)
 
    for root, dirs, files in os.walk(input_directory):
        for file in files:
            if file.endswith(".pdf"):
                input_file = os.path.join(root, file)
                relative_path = os.path.relpath(input_file, input_directory)
                output_file = os.path.join(output_directory, relative_path)
                remove_password(input_file, output_file, password)

上面是批量解密的,顺便再写个批量加密的,保存下面代码为 py 文件执行即可:

import os
from PyPDF2 import PdfReader, PdfWriter
from colorama import init, Fore
 
init()
 
def encrypt_pdf(input_file, output_file, password):
    print(Fore.CYAN + "正在加密文件:", input_file)
    with open(input_file, "rb") as f:
        pdf_reader = PdfReader(f)
        pdf_writer = PdfWriter()
 
        # 加密PDF文件
        pdf_writer.encrypt(password)
 
        for page_num in range(len(pdf_reader.pages)):
            pdf_writer.add_page(pdf_reader.pages[page_num])
 
        # 创建输出目录如果不存在
        os.makedirs(os.path.dirname(output_file), exist_ok=True)
 
        with open(output_file, "wb") as out_f:
            pdf_writer.write(out_f)
 
        print(Fore.GREEN + "PDF文件加密成功.")
        print(Fore.CYAN + "加密后的PDF文件已保存到:", output_file ,"\n")
 
if __name__ == "__main__":
    input_directory = input("输入需要加密的PDF文件所在目录: ")
    output_directory = input("输入保存加密后的 PDF 文件的目录: ")
    password = input("输入加密 PDF 文件所使用的密码: ")
 
    if not os.path.isdir(input_directory):
        print(Fore.RED + f"错误: 输入目录 '{input_directory}' 不存在.")
        exit(1)
 
    for root, dirs, files in os.walk(input_directory):
        for file in files:
            if file.endswith(".pdf"):
                input_file = os.path.join(root, file)
                relative_path = os.path.relpath(input_file, input_directory)
                output_file = os.path.join(output_directory, relative_path)
                encrypt_pdf(input_file, output_file, password)
版权声明

   站内部分内容来自互联网,该文仅限用于学习和研究目的。本站仅提供网络资源分享服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请 联系我们 一经核实,立即删除。访问和下载本站内容,说明您已同意上述条款。在为用户提供最好的产品同时,保证优秀的服务质量。


本站仅提供信息存储空间,不拥有所有权,不承担相关法律责任。
THE END
喜欢就支持一下吧
点赞0分享
评论 抢沙发

请登录后发表评论

    暂无评论内容