使用Python快速读取PDF中的表单数据

目录

安装Python PDF库

Python读取PDF表单数据

1、一次性读取多种PDF表单的数据

2、读取特定PDF表单的数据


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()

Python提取PDF表单的数据

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 表单中提取数据

以上代码介绍了如何使用Python从常用类型的PDF表单中提取数据,你可以根据自己PDF文档中的表单类型对代码进行扩展。

本文完结。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值