
PDF 因其跨平台格式一致性,广泛用于报告、发票和电子表单等场景。然而,由于其固定布局的特性,如果没有专业工具,编辑 PDF 往往并不容易。对于希望使用 Python 编辑 PDF 的开发者来说,Spire.PDF for Python 提供了一套功能全面且易于使用的解决方案。借助这个 Python PDF 编辑库,您可以通过编程方式修改 PDF 文件,包括编辑文本、替换图片、添加批注、处理表单以及设置文档安全权限,而无需依赖 Adobe Acrobat 或其他第三方软件。
在本文中,我们将探讨如何使用 Spire.PDF for Python 在 Python 应用程序中实现 PDF 编辑功能。
为什么选择 Python 和 Spire.PDF 编辑 PDF?
Python 是一种功能强大且用途广泛的编程语言,非常适合实现 PDF 文档的自动化处理与管理。在执行 PDF 编辑任务时,Spire.PDF for Python 是一个全面且易于上手的解决方案。
使用 Python 编辑 PDF 的优势
- 自动化与批量处理:高效简化重复性的 PDF 编辑任务,实现自动化工作流。
- 降低成本:通过程序自动处理 PDF,减少人工操作,从而节省时间和成本。
- 易于集成:可以轻松集成到现有的 Python 系统和业务流程中。
Spire.PDF for Python 的优势
Spire.PDF for Python 是一个独立的 PDF 处理库,无需安装任何外部软件即可创建、读取、编辑、转换和保存 PDF 文件。
主要功能包括:
- 文本和图片编辑
- 注释与书签管理
- PDF 表单处理
- 安全设置(加密与权限控制)
- 转换为 Word、Excel、HTML 和图片
如需了解更多功能,请参考 Spire.PDF for Python 官方教程。
凭借直观易用的 API 设计,Spire.PDF 能帮助开发者快速、高效地完成 PDF 编辑任务。
Spire.PDF for Python 入门
安装
要安装 Spire.PDF for Python,只需运行以下 pip 命令:
pip install spire.pdf
如果需要免费版本,可以安装:
pip install spire.pdf.free
您也可以从官方网站手动下载该库。
基本设置示例
下面的示例演示如何创建一个简单的 PDF 文档:
from spire.pdf import PdfDocument, PdfFont, PdfBrushes, PdfFontFamily, PdfFontStyle
# 创建 PDF 文档
pdf = PdfDocument()
# 添加页面
page = pdf.Pages.Add()
# 创建字体
font = PdfFont(PdfFontFamily.TimesRoman, 28.0, PdfFontStyle.Bold)
# 创建画刷
brush = PdfBrushes.get_Black()
# 绘制文本
page.Canvas.DrawString("Hello, World", font, brush, 100.0, 100.0)
# 保存文档
pdf.SaveToFile("output/NewPDF.pdf")
pdf.Close()
运行结果:
生成的 PDF 使用 Times Roman 粗体显示文本 "Hello, World"。

安装完成后,您就具备使用 Python 编辑 PDF 的基础环境。接下来将介绍如何编辑 PDF 的结构、内容、安全设置以及元数据。
如何使用 Spire.PDF for Python 编辑现有 PDF
Spire.PDF for Python 提供了简单而强大的 API,可帮助开发者以编程方式编辑 PDF。凭借其直观的 API,开发者可以自动化各种 PDF 编辑任务,包括修改文档结构、页面内容、安全设置和属性。下面将分别介绍这些常见场景。
使用 Python 编辑 PDF 页面和文档结构
结构编辑允许您调整页面顺序、合并文件或插入/删除页面,非常适用于文档整理和批量生成场景。
- 插入或删除页面
通过 PdfDocument 类中的 Pages.Insert() 和 Pages.RemoveAt() 方法,可以在指定位置插入或删除页面。
代码示例
from spire.pdf import PdfDocument, PdfPageSize, PdfMargins, PdfPageRotateAngle
# 加载 PDF
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
# 插入页面
pdf.Pages.Insert(0, PdfPageSize.A4(), PdfMargins(50.0, 60.0), PdfPageRotateAngle.RotateAngle90)
# 删除第二页
pdf.Pages.RemoveAt(1)
# 保存
pdf.SaveToFile("output/InsertDeletePage.pdf")
pdf.Close()
输出结果:

- 合并多个 PDF 文件
使用 AppendPage() 方法可将多个 PDF 合并为一个文件。
代码示例
import os
from spire.pdf import PdfDocument
# 指定 PDF 文件路径
pdfPath = "PDFs/"
# 从路径读取 PDF 文件名并添加到列表
files = [pdfPath + file for file in os.listdir(pdfPath) if file.endswith(".pdf")]
# 加载第一个 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile(files[0])
# 遍历其他 PDF 文件
for i in range(1, len(files)):
# 加载当前 PDF 文件
pdf2 = PdfDocument()
pdf2.LoadFromFile(files[i])
# 将当前 PDF 文件的页面追加到第一个 PDF 文件
pdf.AppendPage(pdf2)
# 保存合并后的 PDF 文件
pdf.SaveToFile("output/MergePDFs.pdf")
pdf.Close()
运行结果:

您可能也感兴趣:使用 Python 代码拆分 PDF 文件
使用 Python 编辑 PDF 内容
作为一个功能完善的 Python PDF 编辑器,Spire.PDF 支持多种内容级操作,包括修改文本、图像、注释和交互式表单。
- 替换 PDF 中的文本
通过 PdfTextReplacer 类,可以查找并替换页面中的指定文本。请注意,精确替换可能需要考虑大小写和布局。
示例代码
from spire.pdf import PdfDocument, PdfTextReplacer, ReplaceActionType, Color
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
# 遍历所有页面
for i in range(pdf.Pages.Count):
page = pdf.Pages.get_Item(i)
# 创建 PdfTextReplacer 对象
replacer = PdfTextReplacer(page)
# 设置替换选项
replacer.Options.ReplaceType = ReplaceActionType.IgnoreCase
# 替换文本
replacer.ReplaceAllText("机器人", "无人机")
# 保存 PDF 文件
pdf.SaveToFile("output/ReplaceText.pdf")
pdf.Close()
运行结果:

- 替换 PDF 中的图像
使用 PdfImageHelper 类可以快速替换 PDF 中的图片。通过检索特定页面的图像信息,您可以使用 ReplaceImage() 方法直接用新图像替换原图像。
示例代码
from spire.pdf import PdfDocument, PdfImageHelper, PdfImage
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
# 获取一个页面
page = pdf.Pages.get_Item(0)
# 创建 PdfImageHelper 实例
imageHelper = PdfImageHelper()
# 获取页面上第一张图像的信息
imageInfo = imageHelper.GetImagesInfo(page)[0]
# 加载新图像
newImage = PdfImage.FromFile("Image.png")
# 替换图像
imageHelper.ReplaceImage(imageInfo, newImage)
# 保存 PDF 文件
pdf.SaveToFile("output/ReplaceImage.pdf")
pdf.Close()
运行结果:

- 添加注释或笔记
要使用 Python 添加注释或笔记,请使用 PdfTextMarkupAnnotation 类并将其添加到页面的 AnnotationsWidget 集合中。
示例代码
from spire.pdf import PdfDocument, PdfTextFinder, PdfTextMarkupAnnotation, PdfRGBColor, Color
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
# 获取一个页面
page = pdf.Pages.get_Item(0)
# 创建 PdfTextFinder 实例并设置选项
finder = PdfTextFinder(page)
finder.Options.Parameter.IgnoreCase = False
finder.Options.Parameter.WholeWord = True
# 查找要添加注释的文本
text = finder.Find("充当思维的“外挂硬盘”")[0]
# 获取文本边界
bound = text.Bounds[0]
# 添加注释
commentText = ("此处指生成式AI的\"发散性\"能力。与人类线性思维不同,"
"AI能够在高维空间中通过概率采样生成大量看似不相关但逻辑自洽的创意组合,"
"为创作者提供超出个人经验范围的参考素材,从而降低\"创意枯竭\"的发生概率。")
comment = PdfTextMarkupAnnotation("Commenter", commentText, bound)
comment.TextMarkupColor = PdfRGBColor(Color.get_Yellow())
page.AnnotationsWidget.Add(comment)
# 保存 PDF 文件
pdf.SaveToFile("output/CommentNote.pdf")
pdf.Close()
结果:

- 编辑或读取表单字段
Spire.PDF 支持读取和填写 PDF 表单字段。通过访问 PdfFormWidget 对象的 FieldsWidget 属性,您可以遍历所有交互式表单元素(如文本框、组合框和复选框),并更新或提取其值。
代码示例
from spire.pdf import PdfDocument, PdfFormWidget, PdfComboBoxWidgetFieldWidget, PdfCheckBoxWidgetFieldWidget, PdfTextBoxFieldWidget
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("员工信息登记表.pdf")
forms = pdf.Form
formWidgets = PdfFormWidget(forms).FieldsWidget
# 填写表单
for i in range(formWidgets.Count):
formField = formWidgets.get_Item(i)
if formField.Name == "姓名":
textBox = PdfTextBoxFieldWidget(formField)
textBox.Text = "张三"
elif formField.Name == "出生日期":
textBox = PdfTextBoxFieldWidget(formField)
textBox.Text = "1985年3月15日"
elif formField.Name == "性别":
comboBox = PdfComboBoxWidgetFieldWidget(formField)
comboBox.SelectedIndex = [ 0 ]
elif formField.Name == "同意条款":
checkBox = PdfCheckBoxWidgetFieldWidget(formField)
checkBox.Checked = True
# 读取表单值
formValues = []
for i in range(formWidgets.Count):
formField = formWidgets.get_Item(i)
if isinstance(formField, PdfTextBoxFieldWidget):
formValues.append(formField.Name + ": " + formField.Text)
elif isinstance(formField, PdfComboBoxWidgetFieldWidget):
formValues.append(formField.Name + ": " + formField.SelectedValue)
elif isinstance(formField, PdfCheckBoxWidgetFieldWidget):
formValues.append(formField.Name + ": " + str(formField.Checked))
# 将表单值写入文件
with open("output/FormValues.txt", "w") as file:
file.write("\n".join(formValues))
# 保存 PDF 文件
pdf.SaveToFile("output/FilledForm.pdf")
pdf.Close()
运行结果:

使用 Python 管理 PDF 安全性
对于包含敏感信息的文档,PDF 安全控制至关重要。Spire.PDF 支持加密、密码保护、数字签名处理和权限设置。
- 添加密码并设置权限
使用 Encrypt() 方法可以为 PDF 添加密码,并限制打印、复制等操作权限。
代码示例
from spire.pdf import PdfDocument, PdfEncryptionAlgorithm, PdfDocumentPrivilege, PdfPasswordSecurityPolicy
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("员工信息登记表.pdf")
# 创建 PdfSecurityPolicy 对象并设置密码和加密算法
securityPolicy = PdfPasswordSecurityPolicy("userPSD", "ownerPSD")
securityPolicy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_128
# 设置文档权限
pdfPrivileges = PdfDocumentPrivilege.ForbidAll()
pdfPrivileges.AllowPrint = True
pdfPrivileges.AllowFillFormFields = True
# 应用文档权限
securityPolicy.DocumentPrivilege = pdfPrivileges
# 使用安全策略加密 PDF
pdf.Encrypt(securityPolicy)
# 保存 PDF 文件
pdf.SaveToFile("output/EncryptedForm.pdf")
pdf.Close()
运行结果:

- 移除 PDF 的密码
要打开受保护的文件,请在调用 LoadFromFile() 时提供用户密码,使用 Decrypt() 解密文档,然后重新保存为无保护状态。
代码示例
from spire.pdf import PdfDocument
# 使用所有者密码加载加密的 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("output/EncryptedForm.pdf", "ownerPSD")
# 解密 PDF 文件
pdf.Decrypt()
# 保存 PDF 文件
pdf.SaveToFile("output/DecryptedForm.pdf")
pdf.Close()
为您推荐:使用 Python 在 PDF 中添加和移除数字签名
使用 Python 编辑 PDF 属性
Spire.PDF 还支持读取和修改 PDF 元数据以及查看器设置。
- 更新文档元数据
通过 PDF 文档的 DocumentInformation 属性更新元数据,如标题、作者或主题。
代码示例
from spire.pdf import PdfDocument
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("员工信息登记表.pdf")
# 设置文档元数据
pdf.DocumentInformation.Author = "张三"
pdf.DocumentInformation.Title = "员工信息登记表"
pdf.DocumentInformation.Producer = "Spire.PDF"
# 保存 PDF 文件
pdf.SaveToFile("output/EditProperties.pdf")
pdf.Close()
输出结果:

- 设置查看器首选项
通过 ViewerPreferences 属性,可以自定义 PDF 的显示方式。
代码示例
from spire.pdf import PdfDocument, PdfPageLayout, PrintScalingMode
# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("员工信息登记表.pdf")
# 设置查看器首选项
pdf.ViewerPreferences.DisplayTitle = True
pdf.ViewerPreferences.HideToolbar = True
pdf.ViewerPreferences.HideWindowUI = True
pdf.ViewerPreferences.FitWindow = False
pdf.ViewerPreferences.HideMenubar = True
pdf.ViewerPreferences.PrintScaling = PrintScalingMode.AppDefault
pdf.ViewerPreferences.PageLayout = PdfPageLayout.OneColumn
# 保存 PDF 文件
pdf.SaveToFile("output/EditViewerPreference.pdf")
pdf.Close()
输出结果:

结论
借助 Spire.PDF for Python,使用 Python 编辑 PDF 既实用又高效。无论您是在构建自动化工具、处理电子表单,还是为敏感文档设置安全保护,Spire.PDF 都能提供完整的 PDF 编辑能力,并通过简洁易用的 API 快速实现各种功能。
从内容编辑、表单交互,到文档结构管理和安全控制,Spire.PDF for Python 为开发者和企业提供了一套完善的 PDF 处理解决方案,可帮助您显著提升 PDF 工作流的自动化水平。
常见问题
问题1:可以使用 Python 编辑 PDF 吗?
答:可以。Python 拥有多种 PDF 处理库,例如 Spire.PDF for Python,支持编辑文本、图片、表单、批注以及安全设置等功能。
问题2:如何通过代码编辑 PDF?
答:使用 Spire.PDF for Python 等库,可以加载现有 PDF,以编程方式修改其内容或结构,并仅用几行代码保存更改。
问题3:Python 中有哪些 PDF 编辑库?
答:Spire.PDF for Python 是一个热门选择。它提供了全面的功能,用于创建、读取、编辑、转换和保护 PDF 文档,无需额外软件。
问题4:可以免费编辑 PDF 吗?
答:可以。您可以使用 Spire.PDF for Python 免费版编辑 PDF 文件。但免费版存在一定限制,例如每个文档最多处理 10 页。此外,您可以申请 30 天临时授权许可证,在测试期间解除所有功能限制和水印。







