C# 设置PDF表单不可编辑、或提取PDF表单数据

pdf · 浏览次数 : 0

小编点评

本文介绍了使用Free Spire.PDF库的C#语言,针对PDF表单进行不可编辑设置以及数据提取的两种方法。 首先,介绍了如何将PDF表单设置为不可编辑状态,即PDF扁平化。通过在PdfDocument.Form.IsFlatten属性中设置为true来实现。示例代码展示了如何使用C#代码来锁定PDF表单的所有表单域。 其次,讲述了如何从PDF表单中提取数据。根据不同的表单域类型,使用相应的类及其属性提取数据。例如,文本框、复选框、组合框等。示例代码展示了如何遍历表单域并提取其值,最后将这些值写入到txt文件中。 总之,Free Spire.PDF为.NET提供了丰富的功能,使得对PDF表单的操作变得简便高效。无论是确保表单内容的完整性还是提取表单数据,都可以借助Free Spire.PDF轻松完成。

正文

PDF表单是PDF中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。

之前文章详细介绍过如何使用免费Spire.PDF库通过C# 创建、填写表单,本文将继续介绍该免费.NET PDF库支持的另外两种操作PDF表单的功能,即:

  • 使用C# 设置PDF表单不可编辑(PDF扁平化)
  • 使用C# 提取PDF表单数据

 

免费库安装(2种方法):

Free Spire.PDF for .NET 免费库支持两种安装方式:

  1. 通过 NuGet安装:http://www.nuget.org/packages/FreeSpire.PDF/
  2. 点击下载产品包,解压缩后手动引用dll

https://www.e-iceblue.com/Download/download-pdf-for-net-free.html

 

使用C# 设置PDF表单不可编辑(PDF扁平化)

PDF 表单如文本框、复选框、组合框等都是可编辑或可更改状态,如果想要锁定这些区域,我们需要将PDF表单设置为不可编辑状态,即PDF扁平化。在Free Spire.PDF中, 我们可以通过将其提供的 PdfDocument.Form.IsFlatten 属性设置为 "true" 来锁定PDF表单不可编辑。

简单代码示例:

using Spire.Pdf;
 
namespace FlattenAllFormFields
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载PDF文件
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("PDF表单.pdf");
 
            //设置所有表单不可编辑
            pdf.Form.IsFlatten = true;
 
            //保存生成文件
            pdf.SaveToFile("扁平PDF.pdf");
        }
    }
}

以上示例一键锁定了PDF文件中的所有表单,如果仅需锁定某个指定的表单域,可以参考如下代码片段:

            //获取PDF表单
            PdfFormWidget formWidget = (PdfFormWidget)pdf.Form;
 
            //通过表单名获取指定表单域
            PdfField form = formWidget.FieldsWidget["姓名"];
 
            //通过索引获取指定表单域
            PdfField form = formWidget.FieldsWidget.List[0] as PdfField;
 
            //设置表单不可编辑
            form.Flatten = true;

 

使用C# 提取PDF表单数据

在Free Spire.PDF中,每种表单域都提供了对应的类。要实现PDF表单数据的提取,我们需要先确定表单域的类型,然后再使用相应类下的属性来提取它们的值。

完整C#示例代码:

using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
using System.IO;
using System.Text;
 
namespace ExtractFormFieldValues
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //加载PDF文件
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("PDF表单.pdf");
 
            //创建StringBuilder对象
            StringBuilder sb = new StringBuilder();
 
            //获取PDF表单
            PdfFormWidget formWidget = doc.Form as PdfFormWidget;
 
            //遍历表单
            for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++)
            {
                PdfField field = formWidget.FieldsWidget.List[i] as PdfField;
 
                //获取文本框的名称和值
                if (field is PdfTextBoxFieldWidget)
                {
                    PdfTextBoxFieldWidget textBoxField = field as PdfTextBoxFieldWidget;
                    string name = textBoxField.Name;
                    string value = textBoxField.Text;
                    sb.Append("文本框名称: " + name + "\r\n");
                    sb.Append("文本框内容: " + value + "\r\n");
                }
 
                //获取列表框的名称、项目和选定项
                if (field is PdfListBoxWidgetFieldWidget)
                {
                    PdfListBoxWidgetFieldWidget listBoxField = field as PdfListBoxWidgetFieldWidget;
                    string name = listBoxField.Name;
                    sb.Append("列表框名称: " + name + "\r\n");
                    sb.Append("列表框项目: \r\n");
 
                    PdfListWidgetItemCollection items = listBoxField.Values;
 
                    foreach (PdfListWidgetItem item in items)
                    {
                        sb.Append(item.Value + "\r\n");
                    }
                    string selectedValue = listBoxField.SelectedValue;
                    sb.Append("列表框选定项: " + selectedValue + "\r\n");
                }
 
                //获取组合框字段的名称、项目和选定项
                if (field is PdfComboBoxWidgetFieldWidget)
                {
                    PdfComboBoxWidgetFieldWidget comBoxField = field as PdfComboBoxWidgetFieldWidget;
                    string name = comBoxField.Name;
                    sb.Append("组合框名称: " + name + "\r\n");
                    sb.Append("组合框项目: \r\n");
                    PdfListWidgetItemCollection items = comBoxField.Values;
 
                    foreach (PdfListWidgetItem item in items)
                    {
                        sb.Append(item.Value + "\r\n");
                    }
                    string selectedValue = comBoxField.SelectedValue;
                    sb.Append("组合框选定项: " + selectedValue + "\r\n");
 
                }
 
                //获取单选按钮的名称和所选项
                if (field is PdfRadioButtonListFieldWidget)
                {
                    PdfRadioButtonListFieldWidget radioBtnField = field as PdfRadioButtonListFieldWidget;
                    string name = radioBtnField.Name;
                    sb.Append("单选按钮名称: " + name + "\r\n");
                    string selectedValue = radioBtnField.SelectedValue;
                    sb.Append("单选按钮选定项: " + selectedValue + "\r\n");
                }
 
                //获取复选框的名称和状态
                if (field is PdfCheckBoxWidgetFieldWidget)
                {
                    PdfCheckBoxWidgetFieldWidget checkBoxField = field as PdfCheckBoxWidgetFieldWidget;
                    string name = checkBoxField.Name;
                    sb.Append("复选框名称: " + name + "\r\n");
                    bool status = checkBoxField.Checked;
                    if (status)
                    {
                        sb.Append("复选框状态: 已选中 \r\n");
                    }
                    else
                    {
                        sb.Append("复选框状态: 未选中 \r\n");
                    }
                }
 
                sb.Append("\n");
            }
 
            //将提取的数据写入txt文件
            File.WriteAllText("提取PDF表单.txt", sb.ToString());
            doc.Dispose();
        }
    }
}

提取PDF表单的效果图:

 

总结

免费Spire.PDF支持多种对PDF表单的操作,使用它,我们可以通过C# 轻松实现锁定PDF表单以确保表单不被篡改或编辑,或者通过C# 快速提取PDF表单数据并用于各种用途,如数据分析、报告生成等。

如有兴趣了解更多.NET程序中操作PDF文档的示例,可点击:Spire.PDF中文教程

 

与C# 设置PDF表单不可编辑、或提取PDF表单数据相似的内容:

C# 设置PDF表单不可编辑、或提取PDF表单数据

PDF表单是PDF中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF库通过C# 创建、填写表单,本文将继续介绍该免费.NET

Hello Laravel! Laravel 入门教程

Hello Laravel! 准备 目录Hello Laravel! 准备什么是 Laravel?为什么选择 Laravel?优雅的语法丰富的功能强大的社区支持安全性易于扩展Laravel 的流行程度其他流行的 Web 框架对比环境准备下载 Laragon设置工作目录添加 PHP 版本设置环境变量C

你们眼睛干涩,胀痛吗?C# WPF 久坐提醒桌面小程序 - 内附 眼肌运动、远视力表高清图

目录说明设置提醒时间,及休息时间久坐提醒倒计时休息提醒倒计时休息到计时代码说明主窗体设置工作到计时休息倒计时源码高清图 久坐提醒桌面小程序: 干这行职业病比较多,之前用爱丽(即:玻璃酸钠滴眼液),用的时候挺舒服,缓解吧,不过治标不治本。 注意休息,加强锻炼非常有必要,每工作1小时,休息10分钟(程序

C#的基于.net framework的Dll模块编程(三) - 编程手把手系列文章

继续这个系列的博文: 一、设置DLL类库信息; 在接解决方案资源管理器中选择该Dll程序集项目,鼠标右键,选择属性,打开窗口。 点击“程序集信息”,打开并编辑该Dll程序集的相关信息; 二、代码折叠注释操作; 为了在编辑代码的时候让代码更加美观和专注性,需要将部分代码进行折叠,既做了注释,又能够将该

C#的多线程UI窗体控件显示方案 - 开源研究系列文章

上次编写了《LUAgent服务器端工具》这个应用,然后里面需要新启动一个线程去对文件进行上传到FTP服务器,但是新线程里无法对应用主线程UI的内容进行更改,所以就需要在线程里设置主UI线程里控件信息的方法,于是就有了此博文。此文记录的是一种高级用法。 为了实际的使用,笔者将线程操作放在独立的类当中,

[转帖]CoreDump设置方式

https://www.jianshu.com/p/f5c3134072d2 本文讲述利用coredump调试时,对coredump信息相关的设置方式。 设置core文件大小 列出所有资源的限制 #ulimit -a 1240 查看core file size #ulimit -c 这里对于 cor

C#开发的目录图标更改器 - 开源研究系列文章 - 个人小作品

因为有一些项目保存在文件夹里,然后想着用不同的图标来显示该文件夹,但是Windows提供的那个修改文件夹的操作太麻烦,需要的操作太多(文件夹里鼠标右键,属性,自定义,更改图标,选择文件,选择图标,点击确定),于是就想自己用C#开发一个目录图标管理器,能够快速的将文件夹图标更改为自己想设置的内容,于是

[转帖]修改Linux系统locale设置

https://www.dandelioncloud.cn/article/details/1533243964912332802 1.输入locale命令,查看当前设置,显示为: LANG=C LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="

Windows Server 2022 初始设置

添加本地用户 添加新的本地用户。 在CUI配置上,按如下方式设置。 使用管理员权限运行 PowerShell 并按如下方式进行配置。 Windows PowerShell 版权所由 (C) Microsoft Corporation。 保留所有权利。 安装最新的 PowerShell,了解新功能和改

[转帖]Oracle 用户密码中包括了“@”字符串的错误提示解决方法

Oracle 用户密码设置了带有“@”符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误 解决办法:1:修改密码:修改密码使密码中不包括@符号;2:增加转义即可,在密码前后增加 \"示例如下: CMD中输入:C:\Users\Administrator> exp system/\"ABC@X1