python-pdf文件加密和解密

PDF 文件加密需要使用 encrypt 函数,对应的加密代码也比较简单: 

from PyPDF2 import PdfReader, PdfWriter

pdf_path = r"D:\自动化\道德经.pdf"
sava_path = r"D:\自动化\加密后.pdf"

pdf_reader = PdfReader(pdf_path)
pdf_writer = PdfWriter()

for page in range(len(pdf_reader.pages)):
    pdf_writer.add_page(pdf_reader.pages[page])

# 添加密码
pdf_writer.encrypt("youbafu")

with open(sava_path, "wb") as out:
    pdf_writer.write(out)

执行完成后,加密后,pdf打开则需要输入密码才能打开多个文件进行加密

如果你需要对多个 PDF 文件进行加密,可以修改之前的代码,使用循环遍历文件列表来加密每个文件。以下是一个示例代码,演示如何对指定目录中的所有 PDF 文件进行加密:

from PyPDF2 import PdfReader, PdfWriter
import os

# 输入和输出路径
input_directory = r"D:\自动化\pdfs"  # 包含原始 PDF 文件的目录
output_directory = r"D:\自动化\加密后"  # 加密后的 PDF 文件的输出目录
password = "youbafu"  # 加密密码

# 确保输出目录存在
os.makedirs(output_directory, exist_ok=True)
#这是要创建的目录路径。它可以是一个相对路径或绝对路径。如果路径中包含的任何目录不存在,os.makedirs 将会创建它们。例如,'./path/to/directory' 会创建路径 path/to/directory 及其所有不存在的父目录。
#如果 exist_ok 设置为 True,即使目标目录已经存在,也不会抛出异常。如果设置为 False(默认值),如果目标目录已经存在,os.makedirs 会引发 FileExistsError 异常。

# 遍历目录中的所有 PDF 文件
for filename in os.listdir(input_directory):
    if filename.lower().endswith('.pdf'):#这一行代码的作用是检查文件名是否以“.pdf”结尾,无论文件名的字母是大写还是小写。.lower() 方法将文件名转换为小写,以确保大小写不影响判断。

        input_path = os.path.join(input_directory, filename)# 构造输入文件的完整路径
        output_path = os.path.join(output_directory, filename)# 构造输出文件的完整路径

        # 读取 PDF 文件
        pdf_reader = PdfReader(input_path)
        pdf_writer = PdfWriter()

        # 将 PDF 文件的每一页添加到 PdfWriter 对象中
        for page in range(len(pdf_reader.pages)):
            pdf_writer.add_page(pdf_reader.pages[page])

        # 添加密码
        pdf_writer.encrypt(password)

        # 保存加密后的 PDF 文件
        with open(output_path, "wb") as out_file:
            pdf_writer.write(out_file)

print("所有文件已加密。")

PDF解密

PDF 文件加密需要使用 encrypt 函数,解密则是使用decrypt 函数,代码如下:

from PyPDF2 import PdfReader, PdfWriter

pdf_path = r"D:\自动化\加密后.pdf"
sava_path = r"D:\自动化\解密后.pdf"
pdf_reader = PdfReader(pdf_path)

# 利用密码解密
pdf_reader.decrypt('youbafu')
pdf_writer = PdfWriter()

for page in range(len(pdf_reader.pages)):
    pdf_writer.add_page(pdf_reader.pages[page])
#for page in range(pdf_reader.getNumPages()):
    #pdf_writer.addPage(pdf_reader.getPage(page))

with open(sava_path, "wb") as out:
    pdf_writer.write(out)

  • 12
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值