C#提取PDF表单数据的实现流程

2025-01-29 04:50

本文主要是介绍C#提取PDF表单数据的实现流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用...

引言

PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景。凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用。然而,当需要整合、分析或导入大量已填写的表单数据时,传统的手动处理方式不仅耗时,而且容易出错。因此,掌握自动提取PDF表http://www.chinasem.cn单数据的方法,不仅能大幅提高工作效率,还能确保数据处理的准确性。本文将探讨如何使用C# 实现自动化PDF表单数据提取流程。

  • 使用工具
  • C# 提取多个PDF表单域的数据
  • C# 提取特定PDF表单域的数据

使用工具

要使用C# 提取PDF表单的数据,需要用到合适的PDF文档处理库。本文所使用的是Spire.PDF for .NET库。该库主要用于在 .NET 应用程序中创建、读取、编辑、转换 和打印PDF 文档。

安装 Spire.PDF for .NET

你可以在 NuGet 包管理器中运行以下命令安装 Spire.PDF for .NET:

PM> Install-Package Spire.PDF

如果你已经安装了该库并希望升级到最新版本,可以使用以下命令:

PM> Update-Package Spire.PDF

C# 提取多个PDF表单域的数据

PDF 表单可能包含多种类型的域,例如文本框、列表框、下拉框、单选按钮和复选框。每种域类型需要采用不同的方法来提取其数据。以下是提取这些类型的域的数据时所使用的关键属性:

  • 文本框(Text Boxes
    通过 PdfTextBoxFieldwidget 对象的 Name 和 Text 属性,获取文本框的名称及其对应的值。
  • 列表框(List Boxes
    通过 PdfListBoxFieldWidget 对象的 Name、Values 和 SelectedValue 属性,提取列表框的名称、所有选项及选定的选项。
  • 下拉框(Combo Boxes
    通过 PdfComboBoxFieldWidget 对象的 Name、Values 和 SelectedValue 属性,获取下拉框的名称、所有选项及选定的选项。
  • 单选按钮(Radio Buttons
    通过 PdfRadioButtonListFieldWidget 对象的 Name 和 SelectedValue 属性,获取单选按钮的名称和选定的值。
  • 复选框(Checkboxes
    通过 PdfCheckBoxFieldWidget 对象的 Name 和 Checked 属性,提取复选框的名称及其状态(是否被选中)。

以下代码展示了如何使用 C# 从多个 PDF 表单域中提取数据:

using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
using System.Collections.Generic;
using System.IO;
 
namespace ExtractPdfFormData
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 初始化 PdfDocument 类实例,用于加载和处理 PDF 文件
            using (PdfDocument doc = new PdfDocument())
            {
                // 加载包含表单域的 PDF 文件
                doc.LoadFromFile("表单.pdf");
 
                // 创建列表存储提取的域名称及其值
                List<string> content = new List<string>();
 
                // 获取 PDF 文档的表单对象
                PdfFormWidget formWidget = doc.Form as PdfFormWidget;
 
                // 检查表单对象中是否包含表单域
                if (formWidget?.FieldsWidget.Count > 0)
                {
                    // 遍历文档中的所有表单域
                    for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++)
                    {
                        // 获取当前表单域
                        PdfField field = formWidget.FieldsWidget[i];
 
                        // 如果当前表单域为空,跳过该域
                        if (field == null) continue;
 
                        // 提取当前表单域的内容(名称和值)
                        List<string> currentFieldContent = ExtractFieldContent(fwww.chinasem.cnield);
 
                        // 如果提取到域内容,则将其添加到 content 列表中
                        if (currentFieldContent.Count > 0)
        http://www.chinasem.cn                {
                            content.AddRange(currentFieldContent);
 
                            // 如果不是最后一个表单域,添加一个空行用于分隔不同域的内容
                            if (i < formWidget.FieldsWidget.List.Count - 1)
                            {
                                content.Add(""); // 添加空行分隔不同域的内容
                            }
                        }
                    }
                }
 
                // 将提取的内容逐行写入文本文件
                File.WriteAllLines("提取域数据.txt", content);
            }
        }
 
        /// <summary>
        /// 提取单个 PDF 表单域的内容(域名和域值)
        /// 根据不同的表单域类型(文本框、列表框、下拉框、单选按钮、复选框)提取相应的值
        /// </summary>
        /// <param name="field">当前的 PDF 表单域对象</param>
        /// <returns>包含域内容的字符串列表</returns>
        private static List<string> ExtractFieldContent(PdfField field)
        {
            // 初始化列表来存储当前表单域的内容
            List<string> fieldContent = new List<string>();
 
            // 检查该域是否为文本框
            if (field is PdfTextBoxFieldWidget textBoxField)
            {
                fieldContent.Add($"文本框名称:{textBoxField.Name}");
                fieldContent.Add($"文本框值:{textBoxFielChina编程d.Text}");
            }
            // 检查该域是否为列表框
            else if (field is PdfListBoxWidgetFieldWidget listBoxField)
            {
                fieldContent.Add($"列表框名称:{listBoxField.Name}");
                fieldContent.Add("列表框选项:");
                // 遍历并提取列表框中的所有选项
                foreach (PdfListWidgetItem item in listBoxField.Values)
                {
                    fieldContent.Add($"{item.Value}");
                }
                fieldContent.Add($"列表框选中项:{listBoxField.SelectedValue}");
            }
            // 检查该域是否为下拉框
            else if (field is PdfComboBoxWidgetFieldWidget comboBoxField)
            {
                fieldContent.Add($"下拉框名称:{comboBoxField.Name}");
                fieldContent.Add("下拉框选项:");
                // 遍历并提取下拉框中的所有选项
                foreach (PdfListWidgetItem item in comboBoxField.Values)
                {
                    fieldContent.Add($"{item.Value}");
                }
                fieldContent.Add($"下拉框选中项:{comboBoxField.SelectedValue}");
            }
            // 检查该域是否为单选按钮
            else if (field is PdfRadioButtonListFieldWidget radioBtnField)
            {
                fieldContent.Add($"单选按钮名称:{radioBtnField.Name}");
                fieldContent.Add($"单选按钮选中项:{radioBtnField.SelectedValue}");
            }
            // 检查该域是否为复选框
            else if (field is PdfCheckBoxWidgetFieldWidget checkBoxField)
            {
                fieldContent.Add($"复选框名称:{checkBoxField.Name}");
                fieldContent.Add($"复选框状态:{(checkBoxField.Checked ? "选中" : "未选中")}");
            }
 
            // 返回当前表单域的内容
            return fieldContent;
        }
    }
}

C# 提取特定PDF表单域的数据

如果你需要从特定的表单域中提取数据,可以通过该表单域的名称直接访问它,然后通过判断其类型对应地获取其内容。

以下代码展示了如何使用C# 从名为 “国家” 的PDF表单域中提取数据:

using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
using System.Collections.Generic;
using System.IO;
 
namespace ExtractSpecificFormData
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 初始化 PdfDocument 类实例,用于加载和处理 PDF 文件
            using (PdfDocument doc = new PdfDocument())
            {
                // 加载包含表单域的 PDF 文件
                doc.LoadFromFile("表单.pdf");
 
                // 创建列表来存储提取的表单域名称及其值
                List<string> content = new List<string>();
 
                // 获取 PDF 文档的表单对象
                PdfFormWidget formWidget = doc.Form as PdfFormWidget;
 
                // 指定域名称
                string fieldName = "国家";
 
                // 检查表单对象中是否包含表单域
                if (formWidget?.FieldsWidget.Count > 0)
                {
                    // 通过名称访问特定表单域
                    PdfField specificField = formWidget.FieldsWidget[fieldName];
 
                    // 确保域存在再进行处理
                    if (specificField != null)
                    {
                        // 提取特定表单域的内容(名称和值)
                        List<string> specificFieldContent = ExtractFieldContent(specificField);
 
                        // 如果提取到内容,则将其添加到 content 列表中
                        if (specificFieldContent.Count > 0)
                        {
                            content.AddRange(specificFieldContent);
                        }
                    }
                    else
                    {
                        content.Add($"未找到域 '{fieldName}'");
                    }
                }
                else
                {
                    content.Add("PDF 表单中未找到任何域");
                }
 
                // 将提取的内容逐行写入文本文件
                File.WriteAllLines("提取特定域数据.txt", content);
            }
        }
 
        /// <summary>
        /// 提取单个 PDF 表单域的内容(名称和值)
        /// 处理不同类型的表单域,如文本框、列表框、下拉框、单选按钮和复选框
        /// </summary>
        /// <param name="field">当前 PDF 表单域对象</param>
        /// <returns>包含表单域内容的字符串列表</returns>
        private static List<string> ExtractFieldContent(PdfField field)
        {
            // 初始化列表来存储当前表单域的内容
            List<string> fieldContent = new List<string>();
 
            // 检查该域是否为文本框
            if (field is PdfTextBoxFieldWidget textBoxField)
            {
                // 将文本框的名称和值添加到列表中
                fieldContent.Add($"文本框名称:{textBoxField.Name}");
                fieldContent.Add($"文本框值:{textBoxField.Text}");
            }
            // 检查该域是否为列表框
            else if (field is PdfListBoxWidgetFieldWidget listBoxField)
            {
                fieldContent.Add($"列表框名称:{listBoxField.Name}");
                fieldContent.Add("列表框选项:");
                foreach (PdfListWidgetItem item in listBoxField.Values)
                {
                    fieldContent.Add($"{item.Value}");
                }
                fieldContent.Add($"列表框选中项:{listBoxField.SelectedValue}");
            }
            // 检查该域是否为下拉框
            else if (field is PdfCombChina编程oBoxWidgetFieldWidget comboBoxField)
            {
                fieldContent.Add($"下拉框名称:{comboBoxField.Name}");
                fieldContent.Add("下拉框选项:");
                foreach (PdfListWidgetItem item in comboBoxField.Values)
                {
                    fieldContent.Add($"{item.Value}");
                }
                fieldContent.Add($"下拉框选中项:{comboBoxField.SelectedValue}");
            }
            // 检查该域是否为单选按钮
            else if (field is PdfRadioButtonListFieldWidget radioBtnField)
            {
                fieldContent.Add($"单选按钮名称:{radioBtnField.Name}");
                fieldContent.Add($"单选按钮选中项:{radioBtnField.SelectedValue}");
            }
            // 检查该域是否为复选框
            else if (field is PdfCheckBoxWidgetFieldWidget checkBoxField)
            {
                fieldContent.Add($"复选框名称:{checkBoxField.Name}");
                fieldContent.Add($"复选框状态:{(checkBoxField.Checked ? "选中" : "未选中")}");
            }
 
            // 返回当前表单域的内容列表
            return fieldContent;
        }
    }
}

以上就是使用C# 读取PDF表单域数据的全部内容。

到此这篇关于C#提取PDF表单数据的实现流程的文章就介绍到这了,更多相关C#提取PDF表单数据内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于C#提取PDF表单数据的实现流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:http://www.cppcns.com/ruanjian/csharp/698760.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1153266

相关文章

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性