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)