Python中pypdf库处理PDF文件的详细说明和常见用法

Written by

in

文章目录
  • pypdf 是一个纯 Python 库,用于处理 PDF 文件。它支持读取、修改、合并、拆分、加密和提取 PDF 文件的文本、元数据及页面内容。pypdf 是 PyPDF2 的继任者(2022 年更名并重构),提供了更现代化的 API 和更高的性能,适合处理简单的 PDF 操作任务。 以下是对 pypdf 库的详细说明和常见用法。
  • 读取 PDF:提取文本、元数据、页面数量等。 修改 PDF:合并、拆分、旋转、裁剪页面。 创建 PDF:生成新 PDF 或添加内容(如文本、水印)。 加密/解密:为 PDF 设置密码或解锁受保护的 PDF。 跨平台:纯 Python 实现,无需外部依赖(如 Adobe Acrobat)。
  • Python 版本:支持 Python 3.6+(推荐 3.8+)。 依赖:无强制外部依赖,可选依赖: Pillow:处理 PDF 中的图像。 pycryptodome:支持加密/解密。 安装命令: pip install pypdf 可选扩展: pip install pypdf[image] # 包含 Pillow pip install pypdf[crypto] # 包含 pycryptodome 验证安装: import pypdf print(pypdf.__version__) # 示例输出: 5.0.1
  • pypdf 的核心类包括 PdfReader(读取 PDF)、PdfWriter(修改/创建 PDF)和 PdfMerger(合并 PDF)。以下是主要功能和示例。
  • 高效性:纯 Python 实现,启动快,无需外部工具。 内存效率:逐页处理,适合大型 PDF。 灵活性:支持页面级操作和元数据修改。 局限性: 文本提取效果依赖 PDF 结构,复杂格式(如扫描文档)可能失败。 不支持直接编辑 PDF 内容(如修改文本),需结合其他库(如 reportlab)。
  • 文档处理:合并报告、拆分章节、提取元数据。 自动化工作流:批量处理 PDF(如添加水印、加密)。 数据提取:从 PDF 提取文本或图像用于分析。 电子书管理:调整页面顺序或裁剪边距。 安全管理:为敏感文档设置密码。 示例(提取所有页面文本): from pypdf import PdfReader reader = PdfReader(“example.pdf”) text = “” for page in reader.pages: text += page.extract_text() or “” print(text[:200]) # 输出前 200 字符
  • 文本提取: 扫描或图像型 PDF 需先用 OCR 工具(如 pytesseract)处理。 复杂布局可能导致文本顺序错误。 加密限制: 某些高强度加密可能需要 pycryptodome。 解密需正确密码,否则抛出异常。 文件路径: 确保文件路径正确,建议使用 pathlib 或绝对路径。 版本兼容性: pypdf(≥3.0.0)与 PyPDF2 不完全兼容,旧代码需调整。 最新版本(5.0.1,截至 2025)优化了性能和 API。 错误处理: 处理 FileNotFoundError(文件不存在)。 处理 PdfReadError(文件损坏或加密)。
  • 以下是一个综合示例,展示读取、合并、加密和提取文本: from pypdf import PdfReader, PdfWriter, PdfMerger # 读取 PDF 元数据和文本 reader = PdfReader(“input.pdf”) print(“Metadata:”, reader.metadata) print(“Page count:”, len(reader.pages)) print(“First page text:”, reader.pages[0].extract_text()[:100]) # 合并多个 PDF merger = PdfMerger() merger.append(“input1.pdf”) merger.append(“input2.pdf”) merger.write(“merged.pdf”) merger.close() # 加密合并后的 PDF reader = PdfReader(“merged.pdf”) writer = PdfWriter() for page in reader.pages: writer.add_page(page.rotate(90)) # 旋转页面 writer.encrypt(user_password=”secret”, algorithm=”AES-256″) with open(“encrypted_rotated.pdf”, “wb”) as f: writer.write(f) 说明: 读取元数据和文本。 合并两个 PDF。 旋转页面并加密输出。
  • 官方文档:https://pypdf.readthedocs.io/ GitHub 仓库:https://github.com/py-pdf/pypdf PyPI 页面:https://pypi.org/project/pypdf/ 教程:https://pypdf.readthedocs.io/en/stable/user/introduction.html 迁移指南(从 PyPDF2):https://pypdf.readthedocs.io/en/stable/user/migration.html 到此这篇关于Python中pypdf库处理PDF文件的详细说明和常见用法的文章就介绍到这了,更多相关Python pypdf库处理PDF文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python实现PyPDF2处理PDF文件的方法示例 Python PyPDF2模块安装使用解析 Python利用PyPDF2库获取PDF文件总页码实例 利用Python的PyPDF2库提取pdf中的图片 Python利用PyPDF2快速拆分PDF文档 Python利用PyPDF2库合并多个pdf文件 Python使用PyPDF2操作PDF的详细教程
  • 目录
    • 前言
    • 1. pypdf 库的作用
    • 2. 安装与环境要求
    • 3. 核心功能与用法
      • 3.1 读取 PDF
      • 3.2 合并 PDF
      • 3.3 拆分 PDF
      • 3.4 旋转页面
      • 3.5 加密/解密 PDF
      • 3.6 提取图像
    • 4. 性能与特点
      • 5. 实际应用场景
        • 6. 注意事项
          • 7. 综合示例
            • 8. 资源与文档

              pypdf 是一个纯 Python 库,用于处理 PDF 文件。它支持读取、修改、合并、拆分、加密和提取 PDF 文件的文本、元数据及页面内容。pypdf 是 PyPDF2 的继任者(2022 年更名并重构),提供了更现代化的 API 和更高的性能,适合处理简单的 PDF 操作任务。

              以下是对 pypdf 库的详细说明和常见用法。

              • 读取 PDF:提取文本、元数据、页面数量等。
              • 修改 PDF:合并、拆分、旋转、裁剪页面。
              • 创建 PDF:生成新 PDF 或添加内容(如文本、水印)。
              • 加密/解密:为 PDF 设置密码或解锁受保护的 PDF。
              • 跨平台:纯 Python 实现,无需外部依赖(如 Adobe Acrobat)。

              • Python 版本:支持 Python 3.6+(推荐 3.8+)。
              • 依赖:无强制外部依赖,可选依赖:
                • Pillow:处理 PDF 中的图像。
                • pycryptodome:支持加密/解密。
              • 安装命令
                pip install pypdf
                
              • 可选扩展
                pip install pypdf[image]  # 包含 Pillow
                pip install pypdf[crypto]  # 包含 pycryptodome
                
              • 验证安装
                import pypdf
                print(pypdf.__version__)  # 示例输出: 5.0.1
                

              pypdf 的核心类包括 PdfReader(读取 PDF)、PdfWriter(修改/创建 PDF)和 PdfMerger(合并 PDF)。以下是主要功能和示例。

              使用 PdfReader 读取 PDF 文件,提取元数据、页面数和文本。

              from pypdf import PdfReader
              
              # 打开 PDF 文件
              reader = PdfReader("example.pdf")
              
              # 获取元数据
              metadata = reader.metadata
              print(metadata)  # 输出: {'/Title': 'Example PDF', '/Author': 'John Doe', ...}
              
              # 获取页面数
              print(len(reader.pages))  # 输出页面数
              
              # 提取第一页文本
              page = reader.pages[0]
              print(page.extract_text())
              

              说明

              • reader.metadata 返回 PDF 元数据(如标题、作者)。
              • reader.pages 是一个页面列表,pages[i] 返回第 i 页(从 0 开始)。
              • page.extract_text() 提取页面文本(效果依赖 PDF 结构,可能不完整)。

              使用 PdfMerger 或 PdfWriter 合并多个 PDF 文件。

              from pypdf import PdfMerger
              
              # 创建合并器
              merger = PdfMerger()
              
              # 添加 PDF 文件
              merger.append("file1.pdf")
              merger.append("file2.pdf")
              
              # 保存合并结果
              merger.write("merged.pdf")
              merger.close()
              

              替代方法(使用 PdfWriter)

              from pypdf import PdfReader, PdfWriter
              
              writer = PdfWriter()
              for pdf in ["file1.pdf", "file2.pdf"]:
                  reader = PdfReader(pdf)
                  for page in reader.pages:
                      writer.add_page(page)
              
              with open("merged.pdf", "wb") as f:
                  writer.write(f)
              

              说明

              • PdfMerger 更适合简单合并任务。
              • PdfWriter 提供更灵活的控制。

              将 PDF 拆分为单个页面或指定范围。

              from pypdf import PdfReader, PdfWriter
              
              reader = PdfReader("example.pdf")
              
              # 拆分每一页为单独 PDF
              for i, page in enumerate(reader.pages):
                  writer = PdfWriter()
                  writer.add_page(page)
                  with open(f"page_{i+1}.pdf", "wb") as f:
                      writer.write(f)
              

              说明

              • 每个页面保存为单独文件。
              • 可通过索引选择特定页面范围。

              旋转 PDF 的页面。

              from pypdf import PdfReader, PdfWriter
              
              reader = PdfReader("example.pdf")
              writer = PdfWriter()
              
              # 旋转第一页 90 度
              page = reader.pages[0]
              page.rotate(90)
              writer.add_page(page)
              
              # 保存结果
              with open("rotated.pdf", "wb") as f:
                  writer.write(f)
              

              说明

              • page.rotate(angle) 接受角度(顺时针,90 的倍数)。
              • 旋转后的页面添加到新 PDF。

              为 PDF 设置密码或解锁受保护的 PDF。

              from pypdf import PdfReader, PdfWriter
              
              # 加密 PDF
              reader = PdfReader("example.pdf")
              writer = PdfWriter()
              
              for page in reader.pages:
                  writer.add_page(page)
              
              writer.encrypt(user_password="my_password", algorithm="AES-256")
              with open("encrypted.pdf", "wb") as f:
                  writer.write(f)
              
              # 解密 PDF
              reader = PdfReader("encrypted.pdf")
              if reader.is_encrypted:
                  reader.decrypt("my_password")
              print(reader.pages[0].extract_text())
              

              说明

              • encrypt 支持 RC4-128 和 AES-256 算法。
              • decrypt 需提供正确密码。

              从 PDF 中提取图像(需安装 Pillow)。

              from pypdf import PdfReader
              
              reader = PdfReader("example.pdf")
              page = reader.pages[0]
              for img in page.images:
                  with open(f"image_{img.name}", "wb") as f:
                      f.write(img.data)
              

              说明

              • page.images 返回页面中的图像对象。
              • img.data 是图像的二进制数据。

              • 高效性:纯 Python 实现,启动快,无需外部工具。
              • 内存效率:逐页处理,适合大型 PDF。
              • 灵活性:支持页面级操作和元数据修改。
              • 局限性
                • 文本提取效果依赖 PDF 结构,复杂格式(如扫描文档)可能失败。
                • 不支持直接编辑 PDF 内容(如修改文本),需结合其他库(如 reportlab)。

              • 文档处理:合并报告、拆分章节、提取元数据。
              • 自动化工作流:批量处理 PDF(如添加水印、加密)。
              • 数据提取:从 PDF 提取文本或图像用于分析。
              • 电子书管理:调整页面顺序或裁剪边距。
              • 安全管理:为敏感文档设置密码。

              示例(提取所有页面文本)

              from pypdf import PdfReader
              
              reader = PdfReader("example.pdf")
              text = ""
              for page in reader.pages:
                  text += page.extract_text() or ""
              print(text[:200])  # 输出前 200 字符
              

              • 文本提取
                • 扫描或图像型 PDF 需先用 OCR 工具(如 pytesseract)处理。
                • 复杂布局可能导致文本顺序错误。
              • 加密限制
                • 某些高强度加密可能需要 pycryptodome
                • 解密需正确密码,否则抛出异常。
              • 文件路径
                • 确保文件路径正确,建议使用 pathlib 或绝对路径。
              • 版本兼容性
                • pypdf(≥3.0.0)与 PyPDF2 不完全兼容,旧代码需调整。
                • 最新版本(5.0.1,截至 2025)优化了性能和 API。
              • 错误处理
                • 处理 FileNotFoundError(文件不存在)。
                • 处理 PdfReadError(文件损坏或加密)。

              以下是一个综合示例,展示读取、合并、加密和提取文本:

              from pypdf import PdfReader, PdfWriter, PdfMerger
              
              # 读取 PDF 元数据和文本
              reader = PdfReader("input.pdf")
              print("Metadata:", reader.metadata)
              print("Page count:", len(reader.pages))
              print("First page text:", reader.pages[0].extract_text()[:100])
              
              # 合并多个 PDF
              merger = PdfMerger()
              merger.append("input1.pdf")
              merger.append("input2.pdf")
              merger.write("merged.pdf")
              merger.close()
              
              # 加密合并后的 PDF
              reader = PdfReader("merged.pdf")
              writer = PdfWriter()
              for page in reader.pages:
                  writer.add_page(page.rotate(90))  # 旋转页面
              writer.encrypt(user_password="secret", algorithm="AES-256")
              with open("encrypted_rotated.pdf", "wb") as f:
                  writer.write(f)
              

              说明

              • 读取元数据和文本。
              • 合并两个 PDF。
              • 旋转页面并加密输出。

              • 官方文档:https://pypdf.readthedocs.io/
              • GitHub 仓库:https://github.com/py-pdf/pypdf
              • PyPI 页面:https://pypi.org/project/pypdf/
              • 教程:https://pypdf.readthedocs.io/en/stable/user/introduction.html
              • 迁移指南(从 PyPDF2):https://pypdf.readthedocs.io/en/stable/user/migration.html

              到此这篇关于Python中pypdf库处理PDF文件的详细说明和常见用法的文章就介绍到这了,更多相关Python pypdf库处理PDF文件内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

              您可能感兴趣的文章:

              • Python实现PyPDF2处理PDF文件的方法示例
              • Python PyPDF2模块安装使用解析
              • Python利用PyPDF2库获取PDF文件总页码实例
              • 利用Python的PyPDF2库提取pdf中的图片
              • Python利用PyPDF2快速拆分PDF文档
              • Python利用PyPDF2库合并多个pdf文件
              • Python使用PyPDF2操作PDF的详细教程

              站内搜索