用途
pypdf 是一个纯 Python 库,用于以编程方式处理 PDF 文件。该技能覆盖了常见的 PDF 操作模式,适合在脚本或自动化流程中批量处理 PDF 文档。
主要能力
- PDF 合并:将多个 PDF 合并为一个文档,可带书签(大纲条目),也可按页范围或指定页选择合并,或合并整个目录中的 PDF。
- PDF 拆分:按每文件页数拆分、提取指定页面、按页范围拆分,以及按书签(大纲)条目拆分。
- 页面旋转与变换:按 90、180 或 270 度旋转页面,自动将横向页面旋转为纵向,裁剪页面,缩放页面,以及重新排序页面。
- 水印与图章:创建文字水印 PDF,并将水印添加到指定页面或全部页面。
- 文本提取:从 PDF 页面提取文本内容。
- 元数据处理:读取和修改 PDF 元数据。
- 表单填写:以编程方式填写 PDF 表单字段。
- 加密与解密:使用密码保护 PDF。
使用方式
安装:
# 基础安装
pip install pypdf
# 使用 uv(推荐)
uv pip install pypdf
# 带加密支持
pip install pypdf[crypto]
# 用于创建 PDF(水印、叠加层)
pip install pypdf reportlab
# 完整安装
pip install pypdf[crypto] reportlab Pillow
验证安装:
from pypdf import PdfReader, PdfWriter, PdfMerger
from pypdf.errors import PdfReadError
print("pypdf installed successfully!")
print(f"Version: {pypdf.__version__}")
核心用法示例(合并):
from pypdf import PdfMerger, PdfReader, PdfWriter
from pathlib import Path
from typing import List, Optional
def merge_pdfs(
pdf_paths: List[str],
output_path: str,
bookmarks: bool = True
) -> None:
"""Merge multiple PDFs into one file."""
merger = PdfMerger()
for pdf_path in pdf_paths:
path = Path(pdf_path)
if path.exists():
merger.append(
str(pdf_path),
outline_item=path.stem if bookmarks else None
)
print(f"Added: {path.name}")
else:
print(f"Warning: File not found - {pdf_path}")
merger.write(output_path)
merger.close()
print(f"Merged PDF saved to: {output_path}")
拆分、旋转、水印等操作均通过 PdfReader 读取、PdfWriter 写出,或使用 PdfMerger 合并;创建水印需要 reportlab 生成水印 PDF 后再叠加。
适用场景
- 将多个 PDF 文件合并为单个文档
- 将大型 PDF 拆分为较小文件
- 从 PDF 中提取特定页面
- 为文档添加水印或图章
- 提取文本内容用于分析
- 读取或修改 PDF 元数据
- 以编程方式填写 PDF 表单
- 加密或解密 PDF 文件
- 添加页码或页眉页脚
- 旋转或重新排序页面
- 在流水线中自动化 PDF 工作流
限制
以下情况不应使用本技能:
- 从零创建 PDF(应使用 reportlab 或 weasyprint)
- 需要高级文本布局控制(应使用 reportlab)
- 将其他格式转换为 PDF(应使用专用转换器)
- 需要对扫描文档进行 OCR(应使用 pytesseract + pdf2image)
- 处理复杂表单创建(应使用 reportlab)
- 需要编辑已有文本内容(支持有限)
关于收费、价格、平台支持范围等信息,资料中暂未提供。