如何在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

相关推荐
呆呆小雅2 分钟前
C# 封装
java·开发语言·c#
-Max-静-31 分钟前
Paddle Inference部署推理(十八)
人工智能·windows·深度学习·算法·paddle·推理 部署
就是有点傻1 小时前
C#中面试的常见问题006
开发语言·面试·c#·wpf
没事别学JAVA4 小时前
使用Python编写Windows系统服务管理脚本,主要用于管理mysql、postgresql等服务
windows·python
yivifu5 小时前
用python将一个扫描pdf文件改成二值图片组成的pdf文件
python·pdf·numpy·pillow·pymupdf
IT教程资源7 小时前
java使用泛型判断两个List是否相等
windows
啊啊啊六子11 小时前
windows下安装wsl的ubuntu,同时配置深度学习环境
windows·深度学习·ubuntu
绿荫阿广12 小时前
WinUI(WASDK)使用BotSharp框架开发多智能体桌面机器人管理助手(生图开关灯不在话下)
c#·.net·winui
wh柒八九13 小时前
wkhtmltopdf的安装与使用
pdf·html
就是有点傻14 小时前
WPF中如何让Textbox显示为一条直线
c#·wpf