PDF 格式以其版式稳定、跨平台一致的特性,被广泛应用于合同、报告、电子表单等文档场景。但它也因“不可随意修改”而成为自动化处理的一大难点。借助 Python 我们可以高效地完成 PDF 编辑任务,包括页面调整、文本和图像替换、表单操作、权限设置等,适用于自动归档、系统输出、数据处理等应用。
本文将介绍如何使用Python编辑PDF文档,帮助实现PDF的精确编辑与批量操作。
本文包含以下PDF编辑操作介绍:
- 在Python中载入PDF文档
- 插入与删除页面
- 替换PDF中的文本
- 替换PDF中的图片
- 填写与读取PDF表单字段
- 设置PDF密码与访问权限
- 编辑PDF元数据与查看设置
本文介绍的方法需要使用Free Spire.PDF for Python,安装命令如下:
pip install spire.pdf.free
在Python中载入PDF文档
可以通过初始化 PdfDocument
类并通过 LoadFromFile
从文件路径或通过 LoadFromStream
从字节流载入已有PDF文档进行编辑。具体操作方式如下:
# 创建PDF实例
pdf = PdfDocument()
# 从文件路径载入PDF文件
pdf.LoadFromFile("sample.pdf")
# 从字节流载入PDF文档
with open("sample.pdf", "rb") as f:
byte_data = f.read()
pdfStream = Stream(byte_data)
pdf = PdfDocument(pdfStream)
可根据需要选择载入PDF文档的方法。
插入与删除页面
PDF 页面结构可通过 Pages
集合动态修改。你可以插入空白页用于文档补充,或删除无效页实现结构优化。
操作步骤与方法:
- 使用
PdfDocument.LoadFromFile()
加载现有文档; - 用
Pages.Insert()
插入新页面; - 用
Pages.RemoveAt()
删除指定页面; - 使用
SaveToFile()
和Close()
保存关闭文档。
from spire.pdf import PdfDocument, PdfPageSize, PdfMargins, PdfPageRotateAngle
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
# 插入第一页(旋转90度)
pdf.Pages.Insert(0, PdfPageSize.A4(), PdfMargins(50, 60), PdfPageRotateAngle.RotateAngle90)
# 删除第二页
pdf.Pages.RemoveAt(1)
pdf.SaveToFile("output/InsertDeletePage.pdf")
pdf.Close()
替换PDF中的文本
通过 PdfTextReplacer
,可以查找并替换页面内的指定字符串,常用于自动填充模板、内容纠正等场景。
操作步骤与方法:
- 使用
PdfTextReplacer()
创建替换器; - 设置匹配选项(如
ReplaceActionType.IgnoreCase
); - 使用
ReplaceAllText()
替换文本; - 保存文件。
from spire.pdf import PdfDocument, PdfTextReplacer, ReplaceActionType, Color
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
for i in range(pdf.Pages.Count):
page = pdf.Pages.get_Item(i)
replacer = PdfTextReplacer(page)
replacer.Options.ReplaceType = ReplaceActionType.IgnoreCase
replacer.ReplaceAllText("drones", "ROBOTS", Color.get_Aqua())
pdf.SaveToFile("output/ReplaceText.pdf")
pdf.Close()
替换PDF中的图片
可通过 PdfImageHelper
获取嵌入图像并替换新图,适用于更新 LOGO、批量替换视觉内容等。
操作步骤与方法:
- 获取页面图像信息(
GetImagesInfo()
); - 加载新图片对象(
PdfImage.FromFile()
); - 使用
ReplaceImage()
替换指定图像。
from spire.pdf import PdfDocument, PdfImageHelper, PdfImage
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")
page = pdf.Pages.get_Item(0)
image_info = PdfImageHelper().GetImagesInfo(page)[0]
new_image = PdfImage.FromFile("Image.png")
PdfImageHelper().ReplaceImage(image_info, new_image)
pdf.SaveToFile("output/ReplaceImage.pdf")
pdf.Close()
填写与读取PDF表单字段
使用 Spire.PDF 可以操作 PDF 表单,自动填写内容并提取字段值,用于电子表单填报与数据分析。
操作步骤与方法:
- 获取表单对象(
PdfFormWidget
); - 使用
FieldsWidget
遍历字段; - 根据字段类型(如
PdfTextBoxFieldWidget
)设置值或读取值。
from spire.pdf import PdfDocument, PdfFormWidget, PdfTextBoxFieldWidget
pdf = PdfDocument()
pdf.LoadFromFile("EmployeeInformationForm.pdf")
form_widgets = PdfFormWidget(pdf.Form).FieldsWidget
# 填写表单
for field in form_widgets:
if field.Name == "FullName":
PdfTextBoxFieldWidget(field).Text = "Amanda Ray Thompson"
# 读取字段内容
form_values = []
for field in form_widgets:
if isinstance(field, PdfTextBoxFieldWidget):
form_values.append(f"{field.Name}: {field.Text}")
with open("output/FormValues.txt", "w") as f:
f.write("\n".join(form_values))
pdf.SaveToFile("output/FilledForm.pdf")
pdf.Close()
设置PDF密码与访问权限
Spire.PDF 支持对文档加密、限制打印、复制等操作,用于保护敏感文件内容。
操作步骤与方法:
- 创建
PdfPasswordSecurityPolicy()
设置密码; - 设置加密算法(如
PdfEncryptionAlgorithm.AES_128
); - 定义权限(如
PdfDocumentPrivilege.AllowPrint = True
); - 使用
Encrypt()
应用加密。
from spire.pdf import PdfDocument, PdfPasswordSecurityPolicy, PdfEncryptionAlgorithm, PdfDocumentPrivilege
pdf = PdfDocument()
pdf.LoadFromFile("EmployeeInformationForm.pdf")
policy = PdfPasswordSecurityPolicy("userPSD", "ownerPSD")
policy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_128
privilege = PdfDocumentPrivilege.ForbidAll()
privilege.AllowPrint = True
privilege.AllowFillFormFields = True
policy.DocumentPrivilege = privilege
pdf.Encrypt(policy)
pdf.SaveToFile("output/EncryptedForm.pdf")
pdf.Close()
编辑PDF元数据与查看设置
文档属性可用于分类管理,查看设置则优化阅读体验。可配置标题、作者、显示布局等。
操作步骤与方法:
- 使用
DocumentInformation
设置作者、标题; - 使用
ViewerPreferences
控制工具栏隐藏、页面布局等; - 最后保存文档。
from spire.pdf import PdfDocument, PdfPageLayout, PrintScalingMode
pdf = PdfDocument()
pdf.LoadFromFile("EmployeeInformationForm.pdf")
# 设置文档元信息
pdf.DocumentInformation.Author = "John Doe"
pdf.DocumentInformation.Title = "Employee Information Form"
# 设置查看器显示行为
prefs = pdf.ViewerPreferences
prefs.DisplayTitle = True
prefs.HideToolbar = True
prefs.PageLayout = PdfPageLayout.OneColumn
pdf.SaveToFile("output/EditViewerPreference.pdf")
pdf.Close()
总结
借助 Python,开发者可以用少量代码完成各类 PDF 编辑任务:
- 页面调整:插入或删除页面;
- 内容修改:替换文字、图像;
- 表单处理:填写与读取交互字段;
- 安全控制:设置密码、操作权限;
- 元信息管理:修改标题作者、设置默认阅读方式。
这些功能适用于文档模板处理、自动归档、电子表单生成等多种场景,是构建轻量级文档系统的有力工具。