如何在Windows中使用C#填写和提取PDF表单

如何在Windows中使用C#填写和提取PDF表单

PDF表单不仅允许用户填写和提交数据,也允许用户创建各种表单域收集用户的数据,并通过提取表单字段值,将收集和合并提交的数据进一步分析或处理。PDF通过电子方式填写、保存和共享的形式,不仅减少了对纸质和手动数据输入的需求,还方便个人和组织使用。这也是PDF表单广泛应用于填写问卷调查表、注册表单、反馈表单或政府税表等的原因。

ComPDFKit C#库,允许您轻松快速地将 PDF 功能(如查看、批注、表单填写、签名和文档编辑)集成到 Windows 应用程序中。

PDF表单可以通过C#在PDF中创建表单域、编辑表单域、填写表单域、提取表单域、删除表单域和拼合PDF表单等。在本文中,我们将探讨以下2个 C# 语言在PDF表单中的使用方法:

  1. 填写PDF表单域

  2. 提取PDF表单填写的信息

1. 填写PDF表单域

在C#中使用ComPDFKit SDK填写PDF表单域非常简单。我们将通过填写以下表单中的信息作为示例,来演示如何在PDF文档中填写表单域。

在 PDF 文档中,您可能会遇到各种类型的表单域,例如文本域、复选框、单选按钮、列表框和组合框(下拉列表)、按钮键。在填写表单字段值之前,确定每个表单字段的特定类型至关重要。识别后,再使用代码填充表单域设置它们的值。请按照以下步骤填写PDF文档中的表单字段:

(1) 使用CPDFDocument document 类加载创建的PDF文档。

(2) 使用CPDFPage page类从PDF获取表单。

(3) 使用CPDFWidget 获取表单字段类型和表单域,如文本框和复选框,然后用必要的信息填充它们。

(4) 最后,使用保存方法保存填写的PDF文档。

下面的代码示例演示如何在PDF文档中填写表单域:

 //replace it to real pdf doc pathstring docPath = "";List<string> textFillList = new List<string>(){"ComPDFKit","support@compdf.com","(65)3398 9876"};//init documentCPDFDocument pdfDoc = CPDFDocument.InitWithFilePath(docPath);//get all the forms on the first pageCPDFPage pdfPage = pdfDoc.PageAtIndex(0);List<CPDFWidget> widgetList = pdfPage.GetAnnotations().AsEnumerable().Where(x => x.Type == C_ANNOTATION_TYPE.C_ANNOTATION_WIDGET).Cast<CPDFWidget>().ToList();//get textboxs from above form collectionList<CPDFTextWidget> textWidgetList = widgetList.AsEnumerable().Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_TEXTFIELD).Cast<CPDFTextWidget>().ToList();//get first radiobutton from above form collectionCPDFRadioButtonWidget radioButtonWidget = widgetList.AsEnumerable().Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_RADIOBUTTON).Cast<CPDFRadioButtonWidget>().First();//get first checkbox from above form collectionCPDFCheckBoxWidget checkBoxWidget = widgetList.AsEnumerable().Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_CHECKBOX).Cast<CPDFCheckBoxWidget>().First();//get first combobox from above form collectionCPDFComboBoxWidget comboboxWidget = widgetList.AsEnumerable().Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_COMBOBOX).Cast<CPDFComboBoxWidget>().First();//set textbox's text valuefor (int i = 0; i < textWidgetList.Count && i < 3; i++){CPDFTextWidget textWidget = textWidgetList[i];textWidget.SetText(textFillList[i]);}//set radiobutton checkedradioButtonWidget.SetChecked(true);///set checkbox checkedcheckBoxWidget.SetChecked(true);//set combobox selected indexcomboboxWidget.SelectItem(5);//save changes to orign documentpdfDoc.WriteToLoadedPath();pdfDoc.Release();

如果打开表单,您将看到您在C#中使用ComPDFKit SDK已填写的PDF表单字段:

2. 提取PDF表单填写的信息

您还可以在C#中使用ComPDFKit SDK从PDF表单中提取表单字段以及字段值。我们将通过提取上述填写在表单中的信息作为示例,来演示如何在PDF文档中提取表单字段值。在提取PDF表单字段值之前,需要浏览所有表单域,再利用其相应的属性来准确提取字段值。具体步骤如下:

(1) 使用CPDFDocument document 类加载创建的PDF文档。

(2) 使用CPDFPage page类从PDF获取表单。

(3) 使用CPDFWidget 获取表单字段类型和表单域,循环访问表单中的所有表单字段和相应的值。

(4) 最后,将表单域数值写入文本文件中。

下面的代码示例演示如何在PDF文档中提取表单字段以及字段值:

//replace it to real pdf doc path
string docPath = "";//replace it to real txt path
string txtPath = "";//init document
CPDFDocument pdfDoc = CPDFDocument.InitWithFilePath(docPath);//get all the forms on the first page
CPDFPage pdfPage = pdfDoc.PageAtIndex(0);
List<CPDFWidget> widgetList = pdfPage.GetAnnotations().AsEnumerable().Where(x => x.Type == C_ANNOTATION_TYPE.C_ANNOTATION_WIDGET).Cast<CPDFWidget>().ToList();//save export fields to txt file
using (FileStream fs = File.Create(txtPath))
{using (StreamWriter bw = new StreamWriter(fs)){foreach (CPDFWidget widget in widgetList){//export textbox fieldsif (widget.WidgeType == C_WIDGET_TYPE.WIDGET_TEXTFIELD){CPDFTextWidget textWidget = widget as CPDFTextWidget;bw.WriteLine(string.Format("TextBox Name: {0}", textWidget.GetFieldName()));bw.WriteLine(string.Format("TextBox Value: {0}", textWidget.Text));bw.WriteLine();}//export radio button fieldsif (widget.WidgeType == C_WIDGET_TYPE.WIDGET_RADIOBUTTON){CPDFRadioButtonWidget radiobuttonWidget = widget as CPDFRadioButtonWidget;bw.WriteLine(string.Format("Radio Button Name: {0}", radiobuttonWidget.GetFieldName()));bw.WriteLine(string.Format("Radio Button Selected Value: {0}", radiobuttonWidget.GetGroupMemberName()));bw.WriteLine();}//export checkbox fieldsif (widget.WidgeType == C_WIDGET_TYPE.WIDGET_CHECKBOX){CPDFCheckBoxWidget checkboxWidget = widget as CPDFCheckBoxWidget;bw.WriteLine(string.Format("CheckBox Name: {0}", checkboxWidget.GetFieldName()));bw.WriteLine(string.Format("CheckBox Statues: {0}", checkboxWidget.IsChecked()));bw.WriteLine();}//export combobox fieldsif (widget.WidgeType == C_WIDGET_TYPE.WIDGET_COMBOBOX){CPDFComboBoxWidget comboboxWidget = widget as CPDFComboBoxWidget;CWidgetItem[] itemLists = comboboxWidget.LoadWidgetItems();CWidgetItem selectItem = comboboxWidget.GetSelectedItem();bw.WriteLine(string.Format("ComboBox Name: {0}", comboboxWidget.GetFieldName()));bw.WriteLine("ComboBox Items:");if (itemLists != null && itemLists.Length > 0){foreach (CWidgetItem item in itemLists){bw.WriteLine(item.Text);}}if (selectItem != null){bw.WriteLine(string.Format("ComboBox Selected Value: {0}", selectItem.Value));}bw.WriteLine();}}}
}pdfDoc.Release();

导出的文本文件内容如下图所示:

结论

ComPDFKit SDK 允许C#开发人员在Windows应用程序中集成各种与PDF相关的功能。在本文中,我们学会了利用ComPDFKit SDK使用最简单的代码在C#中填写PDF表单,还了解了在C#中提取PDF表单字段及字段值。

除了填写和提取PDF表单域值,我们还可以通过C#在PDF中创建表单域、编辑表单域、修改表单域、删除表单域、拼合PDF表单等。查看PDF表单文档,您可以在其中找到其他选项和功能,这些选项和功能都附带代码示例。

Code Samples

ComPDFKit PDF API

Try ComPDFKit Now

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.8 工程相关解析(各种文件,资源访问

目录 1.8 工程相关解析(各种文件&#xff0c;资源访问) 分类 Android 基础入门教程 本节引言&#xff1a; 1.工程项目结构解析&#xff1a; 1.res资源文件夹介绍&#xff1a; 2.如何去使用这些资源 2.深入了解三个文件&#xff1a; MainActivity.java&#xff1a; 布局…

【UE】材质描边、外发光、轮廓线

原教学视频链接&#xff1a; ue4 材质描边、外发光、轮廓线_哔哩哔哩_bilibili 步骤 1. 首先新建一个材质&#xff0c;这里命名为“Mat_outLine” 在此基础上创建一个材质实例 2. 在视口中添加一个后期处理体积 设置后期处理体积为无限范围 点击添加一个数组 选择“资产引用”…

牛客网——BM62 斐波那契数列

class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param n int整型 * return int整型*/int Fibonacci(int n) {// write code hereif(n0) //考虑第0项return 0;else if(n1||n2)return 1;else…

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中&#xff0c;我们经常需要与后端服务器进行数据交互。其中&#xff0c;PUT 请求是一种常用的方法&#xff0c;用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求&#xff0c;我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…

开源知识库平台Raneto

什么是 Raneto &#xff1f; Raneto 是一个开源知识库平台&#xff0c;它使用静态 Markdown 文件来支持您的知识库。 官方提供了 doc & demo 网站&#xff0c;即是帮助文档&#xff0c;也是个 demo&#xff0c;地址&#xff1a;https://docs.raneto.com 准备 项目使用con…

微服务井喷时代,我们如何规模化运维?

随着云原生技术发展及相关技术被越来越多运用到公司生产实践当中&#xff0c;有两种不可逆转的趋势&#xff1a; 1、微服务数量越来越多。原来巨型单体服务不断被拆解成一个个微服务&#xff0c;在方便功能复用及高效迭代的同时&#xff0c;也给运维带来了不少挑战&#xff1a;…

pytorch学习——LSTM和GRU

参考书籍&#xff1a;https://zh-v2.d2l.ai/chapter_recurrent-modern/lstm.html 参考论文&#xff1a; https://colah.github.io/posts/2015-08-Understanding-LSTMs/ 简介&#xff1a; LSTM&#xff08;长短期记忆网络&#xff09;和GRU&#xff08;门控循环单元&#xff09;…

Yolov5 中添加注意力机制 CBAM

Yolov5 中添加注意力机制 CBAM 1. CBAM1.1 Channel Attention Module1.2 Spatial Attention Module1.3 Channel attention 和 Spatial attention 如何去使用 2. 在Yolov5中添加CBAM模块2.1 修改common.py 文件2.2 修改yolo.py 文件2.3 修改网络配置yolov5x-seg.yaml文件 3. 训练…

C# WPF 自己写的一个模拟病毒传播的程序,有可视化

源代码: https://github.com/t39q/VirusSpread 主要代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace VirusSpread.Bu…

LeetCode-17-电话号码的字母组合

一&#xff1a;题目描述&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 二&#xff1a;示例与提示 示例 1:…

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现

【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 1 题目 C题蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&…

js函数变量提升理解

var n 10function fn() {// var n 20function f() {// 没用var声明&#xff0c;去外层寻找n,直到找到windows为止&#xff0c;找到的话用的就是哟个全局变量&#xff0c;会改变原始全局变量的值n;console.log(n)}var nn 20f()console.log(n);return f}var x fn()// 会在上一…

爱胜品YPS-1133DN系列打印机网络驱动安装的一点小经验

爱胜品YPS-1133DN打印机基本参数&#xff1a; 项目 详细参数 品牌 ICSP爱胜品 外观配色 上灰下白经典实用设计 打印速度 33ppm&#xff08;A4&#xff09;、35ppm&#xff08;Letter&#xff09;、58ppm&#xff08;A5&#xff09; 首页打印时间 ≤8秒 最大月打印量 …

Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局

在 9 月 6 日&#xff0c;The Digital Asset Summit ’23&#xff08;利比亚大会&#xff09;在尼日利亚首度阿布贾的 NAF 会议中心举办&#xff0c;该会议对 Web3 领域在非洲地区的发展进行了探索&#xff0c;旨在推动非洲地区区块链产业的进一步发展&#xff0c;据悉该会议室…

华为Mate 60和iPhone 15选哪个?

最近也有很多朋友问我这个问题来着&#xff0c;首先两款手机定位都是高端机&#xff0c;性能和体验各有千秋&#xff0c;各自有自己的铁杆粉。 但是让人意想不到的是华为mate60近日在海外越来越受欢迎和追捧&#xff0c;甚至是引起了不少人的抢购&#xff0c;外观设计和…

音视频会议需要哪些设备配置

音视频会议需要哪些设备配置&#xff1f;音视频会议需要&#xff1a;视频会议摄像头、麦克风、扬声器、显示设备、网络连接设备、视频会议服务器、视频会议软件等。 1. 视频会议摄像头&#xff1a;用于捕捉与传输视频图像&#xff0c;可以选择高清摄像头&#xff0c;提供更出色…

Vue生成多文件pdf准考证

这是渲染的数据 这是生成的pdf文件&#xff0c;直接可以打印 需要安装和npm依赖和引入封装的pdf.js文件 npm install --save html2canvas // 页面转图片 npm install jspdf --save // 图片转pdfpdf.js文件 import html2canvas from "html2canvas"; import jsPDF …

DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?

​2023年8月16日~18日&#xff0c;第14届中国数据库技术大会&#xff08;DTCC 2023&#xff09;于北京隆重召开&#xff0c;拓数派受邀参与本次大会&#xff0c;PieCloudDB 技术专家邱培峰在大会做了《云原生虚拟数仓 PieCloudDB ETL 方案设计与实现》的主题演讲&#xff0c;详…

华为云云耀云服务器L实例评测|使用Linux系统与Docker部署.net/c#项目

目录 前言 如何在CentOS运行项目 登录CentOS 使用Rider打包 使用Visual Studio打包 项目运行 后台运行 开放端口 如何在Docker中运行项目 项目运行 前言 本章详细介绍&#xff0c;.net Core项目从打包到部署上华为云云耀云服务器L实例的过程与一些细节问题。在这里…

大数据技术之Hadoop:MapReduce与Yarn概述(六)

目录 一、分布式计算 二、分布式资源调度 2.1 什么是分布式资源调度 2.2 yarn的架构 2.2.1 核心架构 2.2.2 辅助架构 前面我们提到了Hadoop的三大核心功能&#xff1a;分布式存储、分布式计算和资源调度&#xff0c;分别由Hadoop的三大核心组件可以担任。 即HDFS是分布式…