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

news2024/9/21 13:49:04

如何在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 path
 string docPath = "";
 List<string> textFillList = new List<string>()
 {
     "ComPDFKit",
     "support@compdf.com",
     "(65)3398 9876"
 };

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

 //get textboxs from above form collection
 List<CPDFTextWidget> textWidgetList = widgetList.AsEnumerable()
     .Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_TEXTFIELD)
     .Cast<CPDFTextWidget>()
     .ToList();

 //get first radiobutton from above form collection
 CPDFRadioButtonWidget radioButtonWidget = widgetList.AsEnumerable()
     .Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_RADIOBUTTON)
     .Cast<CPDFRadioButtonWidget>()
     .First();

 //get first checkbox from above form collection
 CPDFCheckBoxWidget checkBoxWidget = widgetList.AsEnumerable()
     .Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_CHECKBOX)
     .Cast<CPDFCheckBoxWidget>()
     .First();

 //get first combobox from above form collection
 CPDFComboBoxWidget comboboxWidget = widgetList.AsEnumerable()
     .Where(x => x.WidgeType == C_WIDGET_TYPE.WIDGET_COMBOBOX)
     .Cast<CPDFComboBoxWidget>()
     .First();

 //set textbox's text value
 for (int i = 0; i < textWidgetList.Count && i < 3; i++)
 {
     CPDFTextWidget textWidget = textWidgetList[i];
     textWidget.SetText(textFillList[i]);
 }

 //set radiobutton checked
 radioButtonWidget.SetChecked(true);

 ///set checkbox checked
 checkBoxWidget.SetChecked(true);

 //set combobox selected index
 comboboxWidget.SelectItem(5);

 //save changes to orign document
 pdfDoc.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 fields
            if (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 fields
            if (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 fields
            if (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 fields
            if (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.coloradmin.cn/o/988272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebDAV之π-Disk派盘 + 百灵创作

百灵创作是一款简约而不简单、功能强大且安全的高颜值码字工具,为网络写手和小说作者提供跨平台的写作环境,并提供强大的数据备份和云同步技术,以保障作者的数据安全,并提供流畅的多端无缝切换体验。 百灵创作的特点和功能包括: 简约而不简单:提供简洁直观的界面和操作,…

成都瀚网科技有限公司:抖音怎么绑定抖音小店才好?

抖音是一款非常流行的短视频应用&#xff0c;为用户提供了一个展示才华、分享生活的平台。在抖音上&#xff0c;用户可以通过绑定抖音商店来销售自己的产品或服务&#xff0c;从而实现商业变现。那么&#xff0c;抖音如何绑定抖音商店呢&#xff1f; 1、抖音如何绑定抖音商店&a…

注解方式配置SpringMVC

注解配置SpringMVC 1. 初始化类&#xff0c;代替web.xml2. 创建SpringConfig配置类&#xff0c;代替spring的配置文件3. 创建SpringMVCConfig配置类&#xff0c;代替SpringMVC.xml配置文件4. 项目结构 1. 初始化类&#xff0c;代替web.xml Spring3.2引入了一个便利的WebApplic…

解放程序员生产力的AI代码助手重磅来袭

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

生信教程:多序列比对

摘要 所有系统发育推断方法都需要同源数据集作为输入。因此&#xff0c;当核苷酸序列用于系统发育分析时&#xff0c;第一步通常是推断不同类群序列中的哪些核苷酸彼此同源&#xff0c;以便这些核苷酸之间的差异仅源于序列进化中发生的变化。不同序列的核苷酸之间的同源性推断最…

Windows11 上使用 QEMU 创建 Ubuntu aarch64(ARM64)虚拟机

文章目录 背景步骤要点一、下载QEMU二、下载 QEMU UEFI 固件文件三、Ubuntu 光盘镜像文件四、安装设置 QEMU五、创建虚拟网卡1、安装 tap-windows2、重命名新网卡3、共享物理网卡的网络 六、创建硬盘镜像七、从iso镜像安装虚拟机八、启动镜像九、连接 ssh过程中 powershell 执行…

【已更新建模代码】2023数学建模国赛B题matlab代码--多波束测线问题

一、 问题重述 1.1问题背景 海洋测深是测定水体深度与海底地形的重要任务&#xff0c;有两种主要技术&#xff1a;单波束测 深与多波束测深。单波束适用于简单任务&#xff0c;但多波束可提供更精确的地形数据。多 波束系统的关键在于覆盖宽度与重叠率的设计&#xff0c;以确保…

【Python 自动化】小说推文一键生成思路概述

最近看了一下小说推文成品软件的思路&#xff0c;发现可以完全迁移到我的 BookerAutoVideo 上面来。这篇短文里面&#xff0c;我试着分析一下整个推文视频生成的流程&#xff0c;以及简要阐述一下有什么工具。 整体流程是这样&#xff1a; 分句 原文是按照段落组织的&#xf…

下载安装包,安装 PySide2 到 windows 系统

20201206 修订&#xff1a;修改 PyCharm 中工具的配置描述 一、下载两个.whl 文件到本地&#xff0c; 可以在此下载 https://mirrors.tuna.tsinghua.edu.cn/ 我选用的是以下两个版本&#xff1a; shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl …

Netty源码剖析之HashedWheelTimer时间轮

版本信息&#xff1a; JDK1.8 Netty-all:4.1.38.Final 时间轮的介绍 我们知道钟表分为很多块&#xff0c;每时钟滴答一次就往前走一个块&#xff0c;而时间轮就是使用这个思想。如下图 上图总共分为8块&#xff0c;每过100ms就往前走一块&#xff0c;然后周而复始。此时&#…

关于faust勒索病毒,这些您该了解,勒索病毒解密,数据恢复

faust勒索病毒是一种近年来流行的恶意软件&#xff0c;它通过对计算机系统进行加密并要求支付赎金来达到释放系统的目的。faust勒索病毒的流行程度和危害性不断上升&#xff0c;给企业和个人带来了严重的安全威胁。接下来云天数据恢复中心将从faust勒索病毒的背景、特点、危害、…

paddlespeech on centos7

概述 paddlespeech是百度飞桨平台的开源工具包&#xff0c;主要用于语音和音频的分析处理&#xff0c;其中包含多个可选模型&#xff0c;提供语音识别、语音合成、说话人验证、关键词识别、音频分类和语音翻译等功能。 paddlespeech整体是比较简单易用的&#xff0c;但是安装…

开学季!ChatGPT遭多国高校“封杀”!

美国OpenAI公司研发的聊天机器人ChatGPT&#xff0c;在过去的几个月席卷全球。 OpenAI的创始人之一马斯克&#xff08;Elon Musk&#xff09;曾在社交媒体平台上称赞ChatGPT&#xff1a;“这是全新的世界。和家庭作业说再见吧&#xff01;”&#xff08;Its a new world. Good…

轮播图横向和纵向同时滚动

轮播图横向和纵向同时滚动: <view><swiper v-if"noticeList.length > 0" style"margin-left: 20rpx;position: fixed;margin-top: 10rpx;z-index: 9999;width: 710rpx;border-radius: 20rpx !important;overflow: hidden;transform: translateY(0)…

js-13-Js中的事件模型

事件模型分为&#xff1a;事件与事件流、原始事件模型、标准事件模型和IE事件模型 1、事件与事件流 js中的事件&#xff0c;可以理解为是在HTML中文档或者浏览器中发生的一种交互操作&#xff0c;使得网页具备互动性&#xff0c;常见的有加载事件、鼠标事件、自定义事件等。 由…

CocosCreator3.8研究笔记(十)CocosCreator 图像资源的理解

一、图像资源导入 Cocos Creator 可使用图像文件格式&#xff0c;支持 JPG、PNG、BMP、TGA、HDR、WEBBP、PSD、TIFF 等。 将图像资源直接拖拽到 资源管理器 即可将其导入 二、图像资源的类型 在 属性检查器 面板中便可根据需要设置图像资源的使用类型&#xff1a;raw 、 textu…

window和linux下载ffmpeg

window 进入官方 进入 download 页面并选择 window 版本 下载 zip 压缩包 解压压缩包 解压压缩包之后&#xff0c;在 bin 目录下有三个文件&#xff0c;我们要下载的 window 版 ffmpeg.exe 就在其中&#xff0c;后续你可以添加系统环境变量或者在每次执行 ffmpeg.exe 都带上路…

leetcode386. 字典序排数(java)

字典序排数 题目描述递归法迭代 题目描述 难度 - 中等 leetcode386. 字典序排数 给你一个整数 n &#xff0c;按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。 示例 1&#xff1a; 输入&#xff1a;n 13 输出&#xff1a…

学习Jetpack Compose的反思,总结及新的开始(无干货,纯叙事)

前言及个人简介 我是一名90后安卓开发者&#xff0c;我是从去年五月四日开始学习 Jetpack Compose的&#xff0c;出于对前沿安卓知识的渴望&#xff0c;我点开了Jetpack Compose官网的网页&#xff0c;开始了我的学习之旅&#xff0c;那时候国内的相关文档还没有现在多&#x…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能&#xff0c;使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M&#xff0c;分包有两种情况&#xff1a;普通分包和独立分包&#xff0c;下面介绍的是普通分包。官方文档…