如何在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文档中填写表单域:

csharp 复制代码
 //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文档中提取表单字段以及字段值:

csharp 复制代码
//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

相关推荐
律宏阔13 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔13 小时前
Windows 禁用联想笔记本所有 Lenovo 后台服务
windows
律宏阔13 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
CSharp精选营13 小时前
我用 ASP.NET Core 做了个水稻病虫害检查系统
c#·毕业设计·.net core·码农刚子
唐青枫13 小时前
我用 C# 开发了一款电子发票自动整理工具
c#·.net
下页、再停留13 小时前
【C#桌面客户端系列学习-2】在原来窗口基础上打开新窗口
c#·visual studio
Behavior13 小时前
Unity 手游 iOS Deep Link 唤醒全流程:从 URL Scheme / Universal Links 到 C# 层参数投递
c#·unity3d·游戏开发
我是唐青枫13 小时前
我用 C# 开发了一款电子发票自动整理工具
c#·.net
WAKU13 小时前
C#: 爸爸再爱我一回! 写在微软使用Rust重写GitHub Copilot之后的碎碎念
microsoft·rust·微软·c#·编程语言
唐青枫13 小时前
别把 WPF 写成一个 MainWindow:C#.NET Prism 模块化开发详解
c#·.net