当前位置: 首页 > article >正文

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)


http://www.kler.cn/a/288692.html

相关文章:

  • leetcode hot100【LeetCode 114.二叉树展开为链表】java实现
  • 第74期 | GPTSecurity周报
  • 猿创征文|Inscode桌面IDE:打造高效开发新体验
  • 多叉树笔记
  • 算法——二分查找(leetcode704)
  • 【计算机网络】Socket编程接口
  • 评价决策类——层次分析法+数学建模+实战分析
  • spring -- AOP详解
  • QT教程-十六,QT中如何解析JSON
  • Java注解基础入门
  • LiveQing视频点播流媒体RTMP推流服务功能-支持OBS推流摄像机RTMP推流支持无人机RTMP推流解决大疆无人机推流花屏问题完美解决大疆无人机花屏
  • Postgresql表和索引占用空间回收释放(表空间膨胀)
  • NTFS安全权限和文件共享
  • Ajax的$.post(),$.get(),$.ajax 方法请求都是默认异步请求
  • Python | Leetcode Python题解之第390题消除游戏
  • 3D Tiles的4x4的仿射变换矩阵
  • 计算机网络——ARP篇
  • 向沐神学习笔记:GPT,GPT-2,GPT-3 论文精读【论文精读】GPT部分
  • 4G手机智能遥控开关
  • Oracle查询预防解决分母为0的方法
  • 防御网站数据爬取:策略与实践
  • 基于FPGA实现SD NAND FLASH的SPI协议读写
  • 棋类游戏定制开发:步骤详解
  • ET6框架(七)Excel配置工具
  • 【数论 状态机dp】2572. 无平方子集计数
  • c++懒汉式单例模式(Singleton)多种实现方式及最优比较