PDF 表单通常用于收集用户信息。通过 Python 编程提取 PDF 表单值可以实现自动化处理用户提交的数据,确保准确的数据收集和分析。提取后,您还可以根据表单域的值生成报告,或将其迁移到其他系统或数据库。在本文中,您将学习如何使用 Spire.PDF for Python 提取 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 表单域,包括:
- 文本框(由 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 天的临时许可证。