创建 pdf 表单不仅可以确保专业的外观,还可以让用户以电子方式填写和提交数据,简化数据录入流程。无论您是收集调查反馈、收集客户信息还是创建就业申请表,生成交互式pdf表单的能力都提供了一种无缝、有组织的方式来捕获、存储和管理宝贵的数据。本文将介绍如何使用 spire.pdf for python 在 python 中创建可填写的 pdf 表单,以及如何填写 pdf 表单。
安装 spire.pdf for python
本教程需要用到 spire.pdf for python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 vs code 中。
pip install spire.pdf
如果您不确定如何安装,请参考此教程: 如何在 vs code 中安装 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 天的临时许可证。