用Python编辑PDF文档:结构、内容与安全设置

35 阅读4分钟

wechat_2025-06-26_093512_035.png 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 编辑任务:

  • 页面调整:插入或删除页面;
  • 内容修改:替换文字、图像;
  • 表单处理:填写与读取交互字段;
  • 安全控制:设置密码、操作权限;
  • 元信息管理:修改标题作者、设置默认阅读方式。

这些功能适用于文档模板处理、自动归档、电子表单生成等多种场景,是构建轻量级文档系统的有力工具。