夜雨聆风学习资料网

ARTICLE · 999647

Python开发从零开始-50.44-Office 文档处理

Python开发从零开始-50.44-Office 文档处理

接上文Python开发从零开始-50.43-Office 文档处理,本文小编与大家分享 Python 处理 Office 文档的相关知识。

(6)拆分 PDF 文档

1)将 PDF 文档每个页面拆分为单个文档

pypdf 将 PDF 文档每个页面拆分为单个文档,其拆分逻辑如下:

  • 使用 PdfReader 对象读取文件;

  • 通过 PdfReader 对象的 pages 属性获取所有页面对象列表;

  • 遍历页面对象列表,逐个生成新 PDF 文档(以页面索引为文件名)。

将 PDF 文档每个页面拆分为单个文档的代码示例如下:

from pypdf import PdfReader, PdfWriterimport os# 获取 PdfReader 对象pr = PdfReader("example_merger.pdf")# 定义拆分 PDF 文件存放目录dirname = "example_output"# 判断拆分 PDF 文件存放目录是否存在,不存在则创建if not os.path.exists(dirname):    os.mkdir(dirname)for i, page in enumerate(pr.pages):    # 获取 PdfWriter 对象    split = PdfWriter()    split.add_page(page)    # 生成拆分 PDF 文档每一页的文件名    ofn = f"example_output\\{i}.pdf"    # 将每一页写入新 PDF 文档    with open(ofn, "wb") as f:        split.write(ofn)

代码执行后,生成如下目录和 PDF 文档:

2)拆分 PDF 文档指定页面并逐个生成单个文档

与每个页面生成单个文档逻辑一致,只是在迭代时使用切片操作(连续页面)或使用判断操作(非连续页面)。拆分 PDF 文档指定页面并逐个生成单个文档的代码片段示例如下:

# 指定页面迭代(连续页面)for i, page in enumerate(pr.pages[0 : 3]):    # 获取 PdfWriter 对象    split = PdfWriter()    split.add_page(page)    # 生成拆分 PDF 文档每一页的文件名    ofn = f"example_output\\{i}.pdf"

(7)加密与解密 PDF 文档

1)加密 PDF 文档

pypdf 支持在写入新 PDF 文档时设置用户密码(打开密码)和所有者密码(权限密码,如禁止打印、复制等)。

可以通过 PdfWriter 对象的 encrypt() 方法设置。加密 PDF 文档的代码示例如下:

from pypdf import PdfReader, PdfWriter# 获取 PdfReader 对象pr = PdfReader("example_merger.pdf")# 获取 PdfWriter 对象pw = PdfWriter()# 迭代 PDF 文档页面并添加到 PdfWriter 对象中for page in pr.pages:    pw.add_page(page)# 设置打开密码user_password = "123456"# 设置权限密码owner_password = "abcdef"# 调用 PdfWriter 对象 encrypt() 方法添加打开密码和权限密码pw.encrypt(user_password=user_password, owner_password=owner_password)# 写入 PDF 文档with open("example_encrypt.pdf", "wb") as f:        pw.write(f)

代码执行后,打开生成的 PDF 文档,将提示输入密码:

2)解密 PDF 文档

解密PDF文件,实质是读取加密文件并保存为无密码的新文件。

可以通过 PdfReader 对象的 decrypt() 方法尝试解密。解密 PDF 文档的代码示例如下:

from pypdf import PdfReader, PdfWriter# 获取 PdfReader 对象pr = PdfReader("example_encrypt.pdf")# 获取 PdfWriter 对象pw = PdfWriter()# 检查文件是否加密if pr.is_encrypted:    try:        # 尝试解密        pr.decrypt("123456")    except Exception as e:        print(f"解密失败: {e}")# 迭代 PDF 文档页面并添加到 PdfWriter 对象中for page in pr.pages:    pw.add_page(page)# 写入 PDF 文档with open("example_decrypt.pdf", "wb") as f:        pw.write(f)

代码执行后,生成的 PDF 文档可以直接打开,内容如下图所示:

受文章篇幅所限,下文将继续介绍 Python 处理 Office 文件‌的相关知识。

相关学习资料