最后更新: 2025年1月29日

本文将指导您如何在 Python 中处理 PDF 文件。为此,我们将利用 pypdf 库。
使用 pypdf 库,我们将演示如何在 Python 中执行以下操作:
- 从 PDF 中提取文本
- 旋转 PDF 页面
- 合并多个 PDF
- 拆分 PDF 为单独文件
- 为 PDF 页添加水印
注意: 本文涵盖了许多有价值的细节,您可以随时跳到您最感兴趣的部分!内容按易于导航的方式组织,您可以快速专注于对您而言最重要的部分。

示例代码
您可以从以下链接下载本文使用的所有示例代码,包括代码、输入文件和输出文件。
安装 pypdf
要安装 pypdf,只需在终端或命令提示符中运行以下命令:
pip install pypdf
注意: 上述命令区分大小写。
1. 使用 Python 从 PDF 文件提取文本
代码解释
1. 创建 PDF 阅读器对象
reader = PdfReader(pdf_file)
PdfReader(pdf_file)
将 PDF 文件加载到阅读器对象中。- 该对象允许访问页面及其内容。
2. 遍历页面
for page_number, page in enumerate(reader.pages, start=1):
reader.pages
返回 PDF 中的页面列表。enumerate(..., start=1)
为页面分配从 1 开始的页码。
3. 打印提取的文本
print(f"Page {page_number}:")
print(page.extract_text())
print("-" * 50) # 可读性分隔符
page.extract_text()
从当前页面提取文本内容。- 脚本打印提取的文本和页码。
"-" * 50
打印分隔线(--------------------------------------------------
)以提高可读性。
代码中使用的输入 PDF 文件
- 输入文件: 下载链接
代码输出
2. 使用 Python 旋转 PDF 页面
代码解释
该代码基本上将第一页顺时针旋转90°并保存修改后的 PDF,而不影响其他页面。
1. 导入必需类
from pypdf import PdfReader, PdfWriter
PdfReader
: 读取输入 PDF。PdfWriter
: 创建带有修改的新 PDF。
2. 定义输入和输出文件路径
input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
- 脚本从
input.pdf
读取并将修改后的文件保存为rotated_output.pdf
。
3. 读取 PDF 并创建 Writer 对象
reader = PdfReader(input_pdf)
writer = PdfWriter()
reader
加载现有 PDF。writer
用于存储修改后的页面。
4. 将第一页旋转 90 度
page = reader.pages[0]
page.rotate(90) # 顺时针旋转 90 度
writer.add_page(page)
- 提取第一页,将其旋转90 度,并将其添加到新 PDF 中。
5. 添加其余页面而不做更改
for i in range(1, len(reader.pages)):
writer.add_page(reader.pages[i])
- 遍历剩余页面并按原样添加。
6. 保存新的 PDF
with open(output_pdf, "wb") as file:
writer.write(file)
- 以写入二进制模式打开
rotated_output.pdf
并保存新 PDF。
7. 打印确认信息
print(f"Rotated page saved to {output_pdf}")
- 显示成功消息。
代码中使用的输入 PDF 及其旋转输出
截图
3. 使用 Python 合并 PDF 文件
此 Python 脚本演示了如何使用 PyPDF 库合并目录中的多个 PDF 文件为单个 PDF。
代码解释
- 此脚本自动将指定目录(
pdfs-to-merge
)中的所有 PDF 文件合并为一个输出文件(merged_output.pdf
)。 - 它确保输出目录存在并按列出顺序添加每个 PDF 的页面。
- 它将最终合并后的文件输出到
output-dir
子目录中。
代码拆解
1. 导入库
import os
from pypdf import PdfReader, PdfWriter
os
: 用于与文件系统交互,例如读取目录和管理文件路径。PdfReader
: 读取 PDF 文件内容。PdfWriter
: 创建并写入新 PDF 文件。
2. 定义目录和输出文件
directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
directory
: 指定存储 PDF 文件的文件夹。output_file
: 定义合并的 PDF 的输出路径和名称。
3. 如果输出目录不存在则创建
os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
- 这确保输出目录存在,如果不存在,它会创建它。
4. 创建一个 PdfWriter 对象
writer = PdfWriter()
writer
用于收集并组合所有 PDF 的页面。
5. 遍历目录中的所有 PDF 文件
for file_name in sorted(os.listdir(directory)):
if file_name.endswith(".pdf"):
file_path = os.path.join(directory, file_name)
print(f"Adding: {file_name}")
- 这个循环遍历指定目录中的所有文件,检查扩展名为
.pdf
的文件。它使用sorted()
按字母顺序处理它们。
6. 读取每个 PDF 并附加页面到 Writer
reader = PdfReader(file_path)
writer.append(reader)
- 对于每个 PDF,
PdfReader
读取文件,然后从该 PDF 附加所有页面到writer
。
7. 将合并后的 PDF 写入输出文件
output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
writer.write(output_pdf)
- 收集完所有页面后,
writer.write()
将合并后的 PDF 写入到指定的输出路径。
8. 打印确认信息
print(f"Merged PDF saved as: {output_path}")
- 打印确认保存合并后的 PDF 位置的成功信息。
代码中使用的输入 PDF 文件及合并后的输出 PDF
4. 使用 Python 拆分 PDF
代码解释
上述 Python 脚本使用 PyPDF 库将一个 PDF 拆分为单独的页面。它首先确保输出目录存在,然后读取输入 PDF 文件。脚本遍历每一页,创建一个新的 PdfWriter 对象,并将每一页保存为单独的 PDF 文件。输出文件按顺序命名(例如,page_1.pdf, page_2.pdf)并存储在 output-dir
文件夹中。最后,它为每个创建的文件打印确认消息,并在完成时通知。
输入 PDF 文件和拆分后的输出文件
5. 使用 Python 为 PDF 添加水印
您可以通过将水印 PDF 叠加到现有 PDF 上,使用 PyPDF 库为 PDF 添加水印。确保水印 PDF 只有一页,以便正确地应用到主 PDF 的每页。
代码解释
上述 Python 脚本读取一个输入 PDF,提取一个单页的水印 PDF,将水印覆盖在输入 PDF 的每一页上,并保存最终的带水印的 PDF。
代码拆解
以下是每部分的简要解释
1. 导入必需类
from pypdf import PdfReader, PdfWriter
PdfReader
用于读取现有 PDF。PdfWriter
用于创建并写入新 PDF。
2. 定义文件路径
input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
input_pdf
: 将添加水印的原始 PDF。watermark_pdf
: 一个单页独立 PDF,作为水印。output_pdf
: 包含水印页面的输出文件。
3. 阅读 PDF
reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
reader
: 读取输入 PDF。watermark
: 读取水印 PDF。
4. 创建 Writer 对象
writer = PdfWriter()
- 这将用于创建最终带水印的 PDF。
5. 提取水印页
watermark_page = watermark.pages[0]
- 假定水印 PDF 只包含一页,用于覆盖所有页面。
6. 遍历输入 PDF 页面并合并水印
for page in reader.pages:
# 将水印与当前页面合并
page.merge_page(watermark_page)
# 将合并后的页面添加到 writer
writer.add_page(page)
- 遍历
input_pdf
的每一页。 merge_page(watermark_page)
在当前页面上覆盖水印。- 将修改过的页面添加到
writer
。
7. 保存带水印的 PDF
with open(output_pdf, "wb") as output_file:
writer.write(output_file)
- 将修改后的页面写入新 PDF 文件。
8. 打印确认信息
print(f"Watermarked PDF saved as: {output_pdf}")
- 打印输出路径以供确认。
输入 PDF、水印 PDF 和输出带水印 PDF
截图
结论
在本指南中,我们探讨了 Python 中的重要 PDF 操作,包括提取文本、旋转页面、合并、拆分和添加水印。有了这些技能,您现在可以构建自己的 PDF 管理器,并高效地自动化各种 PDF 任务。