创建 PDF 表单不仅可以确保专业的外观,还可以让用户以电子方式填写和提交数据,简化数据录入流程。无论您是收集调查反馈、收集客户信息还是创建就业申请表,生成交互式PDF表单的能力都提供了一种无缝、有组织的方式来捕获、存储和管理宝贵的数据。本文将介绍如何使用 Spire.PDF for Python 在 Python 中创建可填写的 PDF 表单,以及如何填写 PDF 表单。
安装 Spire.PDF for Python
本教程需要用到 Spire.PDF for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python
Python 在 PDF 中创建可填写表单域
Spire.PDF for Python 提供了一系列有用的类,使程序员能够在 PDF 文件中生成和修改不同类型的表单字段。包括文本框、复选框、组合框、列表框和单选按钮等。下表列出了本教程中涉及的一些类。
类 | 说明 |
PdfForm | 代表 PDF 文档中的交互型表单 |
PdfField | 代表 PDF 交互型表单的域 |
PdfTextBoxField | 代表 PDF 表单中的文本框域 |
PdfCheckBoxField | 代表 PDF 表单中的复选框域 |
PdfComboBoxField | 代表 PDF 表单中的组合框域 |
PdfListBoxField | 代表 PDF 表单中的列表框域 |
PdfListFieldItem | 代表列表框域中的一个项目 |
PdfRadioButtonListField | 代表 PDF 表单中的单选按钮域 |
PdfRadioButtonListItem | 代表单选按钮的一个选项 |
PdfButtonField | 代表 PDF 表单中的按钮域 |
要生成一个 PDF 表单,请首先创建相应字段类的实例。使用 Bounds 属性设置字段在文档中的大小和位置,最后使用 PdfFormFieldCollection.Add() 方法将其添加到 PDF 中。以下是使用 Spire.PDF for Python 在 PDF 文档中创建各种类型表单字段的主要步骤:
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.Pages.Add() 方法添加页面。
- 创建一个 PdfTextBoxField 对象,设置字段的属性,包括 Bounds、Font 和 Text,然后使用 PdfFormFieldCollection.Add() 方法将其添加到文档中。
- 重复第3步,将复选框、组合框、列表框、单选按钮和按钮添加到文档中。
- 使用 PdfDocument.SaveToFile() 方法将文档保存为 PDF 文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建一个PdfDocument对象
doc = PdfDocument()
# 在文档中添加一个页面
page = doc.Pages.Add()
# 设置基准坐标
baseX = 100.0
baseY = 30.0
# 创建两个画刷对象,用于绘制文本和图形
brush1 = PdfSolidBrush(PdfRGBColor(Color.get_Blue()))
brush2 = PdfSolidBrush(PdfRGBColor(Color.get_Black()))
# 创建字体对象
font = PdfTrueTypeFont("宋体", 12.0, PdfFontStyle.Regular,True)
# 在页面的指定位置绘制"文本框:"文本
page.Canvas.DrawString("文本框:", font, brush1, PointF(10.0, baseY))
# 创建一个文本框域,并设置其边界和字体属性
tbxBounds = RectangleF(baseX, baseY, 150.0, 15.0)
textBox = PdfTextBoxField(page, "文本框")
textBox.Bounds = tbxBounds
textBox.Font = font
# 将文本框域添加到文档的表单域集合中
doc.Form.Fields.Add(textBox)
# 更新基准坐标
baseY += 30.0
# 绘制"复选框:"文本
page.Canvas.DrawString("复选框:", font, brush1, PointF(10.0, baseY))
# 创建第一个复选框域,并设置其边界和状态
checkboxBound1 = RectangleF(baseX, baseY, 15.0, 15.0)
checkBoxField1 = PdfCheckBoxField(page, "复选框一")
checkBoxField1.Bounds = checkboxBound1
checkBoxField1.Checked = False
# 绘制"选项一"文本
page.Canvas.DrawString("选项一", font, brush2, PointF(baseX + 20.0, baseY))
# 创建第二个复选框域,并设置其边界和状态
checkboxBound2 = RectangleF(baseX + 70.0, baseY, 15.0, 15.0)
checkBoxField2 = PdfCheckBoxField(page, "复选框二")
checkBoxField2.Bounds = checkboxBound2
checkBoxField2.Checked = False
# 绘制"选项二"文本
page.Canvas.DrawString("选项二", font, brush2, PointF(baseX + 90.0, baseY))
# 将两个复选框域添加到文档的表单域集合中
doc.Form.Fields.Add(checkBoxField1)
doc.Form.Fields.Add(checkBoxField2)
# 更新基准坐标
baseY += 30.0
# 在页面上绘制"列表框:"文本
page.Canvas.DrawString("列表框:", font, brush1, PointF(10.0, baseY))
# 创建一个列表框域,并设置其边界和字体属性
listboxBound = RectangleF(baseX, baseY, 150.0, 50.0)
listBoxField = PdfListBoxField(page, "列表框")
# 添加列表框的选项
listBoxField.Items.Add(PdfListFieldItem("列表选项一", "列表选项一"))
listBoxField.Items.Add(PdfListFieldItem("列表选项二", "列表选项二"))
listBoxField.Items.Add(PdfListFieldItem("列表选项三", "列表选项三"))
listBoxField.Bounds = listboxBound
listBoxField.Font = font
# 将列表框域添加到文档的表单域集合中
doc.Form.Fields.Add(listBoxField)
# 更新基准坐标
baseY += 60.0
# 在页面上绘制"单选按钮:"文本
page.Canvas.DrawString("单选按钮:", font, brush1, PointF(10.0, baseY))
# 创建一个单选按钮组域
radioButtonListField = PdfRadioButtonListField(page, "单选按钮")
# 创建第一个单选按钮项,并设置其边界和文本内容
radioItem1 = PdfRadioButtonListItem("按钮选项一")
radioBound1 = RectangleF(baseX, baseY, 15.0, 15.0)
radioItem1.Bounds = radioBound1
# 在页面上绘制"按钮选项一"文本
page.Canvas.DrawString("按钮选项一", font, brush2, PointF(baseX + 20.0, baseY))
# 创建第二个单选按钮项,并设置其边界和文本内容
radioItem2 = PdfRadioButtonListItem("按钮选项二")
radioBound2 = RectangleF(baseX + 100.0, baseY, 15.0, 15.0)
radioItem2.Bounds = radioBound2
# 在页面上绘制"按钮选项二"文本
page.Canvas.DrawString("按钮选项二", font, brush2, PointF(baseX + 120.0, baseY))
# 将单选按钮项添加到单选按钮组域中
radioButtonListField.Items.Add(radioItem1)
radioButtonListField.Items.Add(radioItem2)
# 将单选按钮组域添加到文档的表单域集合中
doc.Form.Fields.Add(radioButtonListField)
# 更新基准坐标
baseY += 30.0
# 在页面上绘制"组合框:"文本
page.Canvas.DrawString("组合框:", font, brush1, PointF(10.0, baseY))
# 创建一个下拉框域,并设置其边界
cmbBounds = RectangleF(baseX, baseY, 150.0, 15.0)
comboBoxField = PdfComboBoxField(page, "组合框")
comboBoxField.Bounds = cmbBounds
# 添加下拉框的选项
comboBoxField.Items.Add(PdfListFieldItem("组合框选项一", "组合框选项一"))
comboBoxField.Items.Add(PdfListFieldItem("组合框选项二", "组合框选项二"))
comboBoxField.Items.Add(PdfListFieldItem("组合框选项三", "组合框选项三"))
comboBoxField.Font = font
# 将下拉框域添加到文档的表单域集合中
doc.Form.Fields.Add(comboBoxField)
# 更新基准坐标
baseY += 30.0
# 在页面上绘制"按钮:"文本
page.Canvas.DrawString("按钮:", font, brush1, PointF(10.0, baseY))
# 创建一个按钮域,并设置其边界和文本内容
btnBounds = RectangleF(baseX, baseY, 50.0, 15.0)
buttonField = PdfButtonField(page, "按钮")
buttonField.Bounds = btnBounds
buttonField.Text = "提交"
buttonField.Font = font
# 创建一个提交动作对象,并设置提交的URL地址
submitAction = PdfSubmitAction("https://www.e-iceblue.com/getformvalues.php")
# 将提交动作关联到按钮的鼠标按下事件
buttonField.Actions.MouseDown = submitAction
# 将按钮域添加到文档的表单域集合中
doc.Form.Fields.Add(buttonField)
# 将文档保存为PDF文件
doc.SaveToFile("表单域.pdf", FileFormat.PDF)
doc.Close()
Python 在 PDF 中填充表单域
为了填写表单,需要执行以下步骤:获取 PDF 文档中的所有表单字段、根据字段的类型和名称定位特定字段,然后输入或从预定义列表中选择一个值。以下是详细的步骤:
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.LoadFromFile() 方法加载示例 PDF 文档。
- 通过 PdfDocument.Form 属性获取文档的表单。
- 通过 PdfFormWidget.FieldsWidget 属性获取表单小部件集合。
- 根据字段的类型和名称获取特定的表单字段。
- 为该字段输入一个值或从预定义列表中选择一个值。
- 使用 PdfDocument.SaveToFile() 方法将文档保存为 PDF 文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 对象
doc = PdfDocument()
# 从文件加载 PDF 文档
doc.LoadFromFile("表单域.pdf")
# 获取表单对象
form = doc.Form
# 创建表单部件对象
formWidget = PdfFormWidget(form)
# 获取表单部件集合对象
formWidgetCollection = formWidget.FieldsWidget
# 检查表单部件数量是否大于 0
if formWidgetCollection.Count > 0:
# 遍历表单部件集合
for i in range(formWidgetCollection.Count):
# 获取当前表单部件
field = formWidgetCollection.get_Item(i)
# 判断当前表单部件是否为文本框部件
if isinstance(field, PdfTextBoxFieldWidget):
# 将表单部件转换为文本框部件对象,并进行操作
textBoxField = field if isinstance(field, PdfTextBoxFieldWidget) else None
# 根据表单部件名称进行判断和操作
if textBoxField.Name == "姓名":
textBoxField.Text = "张三"
# 判断当前表单部件是否为列表框部件
if isinstance(field, PdfListBoxWidgetFieldWidget):
# 将表单部件转换为列表框部件对象,并进行操作
listBoxField = field if isinstance(field, PdfListBoxWidgetFieldWidget) else None
# 根据表单部件名称进行判断和操作
if listBoxField.Name == "所在专业":
index = [0]
listBoxField.SelectedIndex = index
# 判断当前表单部件是否为组合框部件
if isinstance(field, PdfComboBoxWidgetFieldWidget):
# 将表单部件转换为组合框部件对象,并进行操作
comboBoxField = field if isinstance(field, PdfComboBoxWidgetFieldWidget) else None
# 根据表单部件名称进行判断和操作
if comboBoxField.Name == "国籍":
items = [0]
comboBoxField.SelectedIndex = items
# 判断当前表单部件是否为单选按钮组部件
if isinstance(field, PdfRadioButtonListFieldWidget):
# 将表单部件转换为单选按钮组部件对象,并进行操作
radioButtonField = field if isinstance(field, PdfRadioButtonListFieldWidget) else None
# 根据表单部件名称进行判断和操作
if radioButtonField.Name == "性别":
radioButtonField.SelectedIndex = 1
# 判断当前表单部件是否为复选框部件
if isinstance(field, PdfCheckBoxWidgetFieldWidget):
# 将表单部件转换为复选框部件对象,并进行操作
checkBoxField = field if isinstance(field, PdfCheckBoxWidgetFieldWidget) else None
# 根据表单部件名称进行判断和操作
if checkBoxField.Name == "绘画":
checkBoxField.Checked = True
# 将填充后的表单保存到文件
doc.SaveToFile("填充表单域.pdf")
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。