目录
PDF表单是常见的数据收集工具,用于收集用户或客户提供的信息。通过编程的方式读取PDF表单的数据可以准确获取用户信息,避免手动输入或转录,从而节省时间和劳动力,同时降低数据输入错误的风险。这篇文章将探讨如何使用Python快速读取PDF表单数据。
安装Python PDF库
Python中有许多可以处理PDF的库,这篇文章使用的库是Spire.PDF for Python,它支持创建和读取各种类型的PDF表单,包括文本框、列表框、下拉列表(组合框)、复选框、单选按钮等。此外,还支持对PDF文档进行很多其他操作,例如合并PDF,拆分PDF,转换PDF到Word、Excel等格式。
你可以通过在终端运行以下命令来从PyPI安装Spire.PDF for Python:
pip install Spire.PDF
Python读取PDF表单数据
在读取PDF文档的表单数据时,你可以选择一次性读取多个表单的数据,也可以只读取某个特定表单的数据。下面将逐一介绍这两种PDF表单数据提取场景。
1、一次性读取多种PDF表单的数据
要一次性读取PDF中多种表单的数据,你需要遍历这些表单并判断每个表单的类型,然后根据它的类型相应地获取它的数据。以下步骤展示了如何获取PDF中文本框、列表框、下拉列表(组合框)、单选按钮和复选框的名称和值:
- 创建PdfDocument实例。
- 使用PdfDocument.LoadFromFile()方法加载PDF文档。
- 使用PdfDocument.Form属性获取PDF文档的表单集合。
- 创建列表存储提取的表单数据。
- 循环遍历表单集合中的所有表单,对于每个表单,判断其类型,并根据类型获取相应的信息。
- 如果是文本框(PdfTextBoxFieldWidget),则获取文本框的名称和值,并将其添加到列表中。
- 如果是列表框(PdfListBoxWidgetFieldWidget),则获取列表框的名称、选中项的值以及列表框的所有项,并将它们添加到列表中。
- 如果是下拉列表(PdfComboBoxWidgetFieldWidget),则获取下拉列表的名称、选中项的值以及下拉列表的所有项,并将它们添加到列表中。
- 如果是单选按钮(PdfRadioButtonListFieldWidget),则获取单选按钮的名称和选中项的值,并将它们添加到列表中。
- 如果是复选框(PdfCheckBoxWidgetFieldWidget),则获取复选框的名称和状态(选中或未选中),并将它们添加到列表中。
- 使用open函数创建一个文本文件,并将列表中的内容写入文件中。
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 类的对象
doc = PdfDocument()
# 加载 PDF 文档
doc.LoadFromFile("表单.pdf")
# 创建列表存储提取的表单名称和值
content = []
# 从文档中获取表单集合
form = doc.Form
formWidget = PdfFormWidget(form)
# 遍历每个表单
if formWidget.FieldsWidget.Count > 0:
for i in range(formWidget.FieldsWidget.List.Count):
field = formWidget.FieldsWidget.get_Item(i)
# 获取文本框表单的名称和值
if isinstance(field, PdfTextBoxFieldWidget):
textBoxField = field
name = textBoxField.Name
value = textBoxField.Text
content.append(f"文本框名称:{name}\n")
content.append(f"文本框值:{value}\r\n")
# 获取列表框表单的名称、选项和选中的项
if isinstance(field, PdfListBoxWidgetFieldWidget):
listBoxField = field
name = listBoxField.Name
content.append(f"列表框名称:{name}\n")
content.append("列表框选项:\n")
items = listBoxField.Values
for i in range(items.Count):
item = items.get_Item(i)
content.append(f"{item.Value}\n")
selectedValue = listBoxField.SelectedValue
content.append(f"列表框选中项:{selectedValue}\r\n")
# 获取下拉列表(组合框)表单的名称、选项和选中的项
if isinstance(field, PdfComboBoxWidgetFieldWidget):
comBoxField = field
name = comBoxField.Name
content.append(f"下拉列表名称:{name}\n")
content.append("下拉列表选项:\n")
items = comBoxField.Values
for i in range(items.Count):
item = items.get_Item(i)
content.append(f"{item.Value}\n")
selectedValue = comBoxField.SelectedValue
content.append(f"下拉列表选中项:{selectedValue}\r\n")
# 获取单选按钮表单的名称和选中的项
if isinstance(field, PdfRadioButtonListFieldWidget):
radioBtnField = field
name = radioBtnField.Name
content.append(f"单选按钮名称:{name}\n")
selectedValue = radioBtnField.SelectedValue
content.append(f"单选按钮选中项:{selectedValue}\r\n")
# 获取复选框表单的名称和状态
if isinstance(field, PdfCheckBoxWidgetFieldWidget):
checkBoxField = field
name = checkBoxField.Name
content.append(f"复选框名称:{name}\n")
status = checkBoxField.Checked
if status:
content.append("复选框状态:已选中\n")
else:
content.append("复选框状态:未选中\r\n")
# 将列表内容写入文本文件
with open("表单数据.txt", "w", encoding="UTF-8") as file:
file.writelines(content)
doc.Dispose()
2、读取特定PDF表单的数据
除了一次性读取多个表单数据外,你也可以通过表单名称或它的索引获取该表单,然后获取它的数据。以下步骤展示了如何获取一个特定文本框表单的名称和值:
- 创建PdfDocument实例。
- 使用PdfDocument.LoadFromFile()方法加载PDF文档。
- 使用PdfDocument.Form属性获取PDF文档的表单集合。
- 创建列表存储提取的表单数据。
- 通过名称或索引获取特定的文本框。
- 获取文本框的名称和值,并将它们添加到列表中。
- 使用open函数创建一个文本文件,并将列表中的内容写入文件中。
from spire.pdf.common import *
from spire.pdf import *
# 创建 PdfDocument 类的实例
doc = PdfDocument()
# 加载 PDF 文档
doc.LoadFromFile("表单.pdf")
# 创建列表以存储提取的表单名称和值
content = []
# 获取 PDF 表单
form = doc.Form
formWidget = PdfFormWidget(form)
# 通过名称获取文本框表单
field = formWidget.FieldsWidget.get_Item("姓名")
# 或者通过索引获取文本框表单
# field = formWidget.FieldsWidget.get_Item(0)
textbox = PdfTextBoxFieldWidget(field.Ptr)
# 获取文本框的名称和值
name = textbox.Name
value = textbox.Text
content.append(f"文本框名称: {name}\n")
content.append(f"文本框值: {value}")
# 将结果保存到文本文件
with open("特定表单数据.txt", "w", encoding="UTF-8") as file:
file.writelines(content)
doc.Close()
以上代码介绍了如何使用Python从常用类型的PDF表单中提取数据,你可以根据自己PDF文档中的表单类型对代码进行扩展。
本文完结。