pdf 表单通常用于收集用户信息。通过 python 编程提取 pdf 表单值可以实现自动化处理用户提交的数据,确保准确的数据收集和分析。提取后,您还可以根据表单域的值生成报告,或将其迁移到其他系统或数据库。在本文中,您将学习如何使用 spire.pdf for python 提取 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 表单域,包括:
- 文本框(由 pdftextboxfieldwidget 类表示)
- 复选框(由 pdfcheckboxwidgetfieldwidget 类表示)
- 单选按钮(由 pdfradiobuttonlistfieldwidget 类表示)
- 列表框(由 pdflistboxwidgetfieldwidget 类表示)
- 组合框(由 pdfcomboboxwidgetfieldwidget 类表示)
在从 pdf 表单域中提取数据之前,需要先确定每个表单域的具体类型,然后就可以通过对应表单域类下的属性来准确提取它们的值了。具体步骤如下。
- 创建一个 pdfdocument 类的对象。
- 使用 pdfdocument.loadfromfile() 方法加载 pdf 文档。
- 使用 pdfdocument.form 属性获取 pdf 文档中的表单。
- 创建一个列表来存储提取的表单域的值。
- 遍历所有 pdf 表单域。
- 确定表单域的类型,然后使用相应的属性获取表单域的名称和值。
- 将获取的数据写入 txt 文本文件。
- python
from spire.pdf.common import *
from spire.pdf import *
inputfile = "pdf表单.pdf"
outputfile = "获取表单数据.txt"
# 创建pdfdocument对象
pdf = pdfdocument()
# 加载pdf文件
pdf.loadfromfile(inputfile)
# 获取pdf表单
pdfform = pdf.form
formwidget = pdfformwidget(pdfform)
sb = []
# 遍历所有表单域
if formwidget.fieldswidget.count > 0:
for i in range(formwidget.fieldswidget.count):
field = formwidget.fieldswidget.get_item(i)
# 获取文本框的名称和值
if isinstance(field, pdftextboxfieldwidget):
textboxfield = field if isinstance(field, pdftextboxfieldwidget) else none
name = textboxfield.name
value = textboxfield.text
sb.append("textbox name: " name "\r")
sb.append("textbox name " value "\r\n")
# 获取列表框的名称
if isinstance(field, pdflistboxwidgetfieldwidget):
listboxfield = field if isinstance(field, pdflistboxwidgetfieldwidget) else none
name = listboxfield.name
sb.append("listbox name: " name "\r")
# 获取列表框中的项目
sb.append("listbox items: \r")
items = listboxfield.values
for i in range(items.count):
item = items.get_item(i)
sb.append(item.value "\r")
# 获取列表框的选中项
selectedvalue = listboxfield.selectedvalue
sb.append("listbox selected value: " selectedvalue "\r\n")
# 获取组合框的名称
if isinstance(field, pdfcomboboxwidgetfieldwidget):
comboxfield = field if isinstance(field, pdfcomboboxwidgetfieldwidget) else none
name = comboxfield.name
sb.append("combobox name: " name "\r");
# 获取组合框中的项目
sb.append("combobox items: \r");
items = comboxfield.values
for i in range(items.count):
item = items.get_item(i)
sb.append(item.value "\r")
# 获取组合框的选中项
selectedvalue = comboxfield.selectedvalue
sb.append("combobox selected value: " selectedvalue "\r\n")
# 获取单选按钮的名称和选中项
if isinstance(field, pdfradiobuttonlistfieldwidget):
radiobtnfield = field if isinstance(field, pdfradiobuttonlistfieldwidget) else none
name = radiobtnfield.name
selectedvalue = radiobtnfield.selectedvalue
sb.append("radio button name: " name "\r");
sb.append("radio button selected value: " selectedvalue "\r\n")
# 获取复选框的名称和状态
if isinstance(field, pdfcheckboxwidgetfieldwidget):
checkboxfield = field if isinstance(field, pdfcheckboxwidgetfieldwidget) else none
name = checkboxfield.name
sb.append("checkbox name: " name "\r")
state = checkboxfield.checked
statevalue = "yes" if state else "no"
sb.append("if the checkbox is checked: " statevalue "\r\n")
# 将获取的数据写入txt文本文件
f2=open(outputfile,'w', encoding='utf-8')
for item in sb:
f2.write(item)
f2.close()
pdf.close()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。