首页 > 编程语言 >C# 设置PDF表单不可编辑、或提取PDF表单数据

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

时间:2024-06-17 16:43:28浏览次数:28  
标签:string C# 表单 field sb PDF Append

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中文教程

 

标签:string,C#,表单,field,sb,PDF,Append
From: https://www.cnblogs.com/Yesi/p/18252698

相关文章

  • Maya 2024 mac/win版:创意无界,设计新生
    Maya2024是一款由Autodesk推出的业界领先的三维计算机图形软件,广泛应用于电影、游戏、广告等创意产业。这款软件以其强大的功能和卓越的性能,为艺术家们提供了一个实现创意梦想的平台。→→↓↓载Maya2024mac/win在建模方面,Maya2024提供了丰富的工具集,支持多边形建模、NURBS......
  • 11、docker-dockerfile--构建docker的镜像文件和容器的挂载卷方法 方式二挂载
    挂载方式二:此方式是在生成镜像的同时也实现挂载1、现在本机创建一个目录文件存放脚本·mkdir/home/docker-volume-test2、创建脚本文件·vim  /home/docker-volume-test/dockerfile01·内容如下:FROMcentos//表示......
  • vscode使用tabnine ide插件,ai插件
    安装安装上面这个插件后,会提示登录,可以使用github在线地址登录。代码提示代码指令使用侧边栏功能总结tabninevscode插件就是一款代码ai自动补全的插件,侧边栏还可以进行代码解释、修正等功能。......
  • 机器学习之pca
    1.pca简介PCA通过线性变换将高维数据转换为低维数据,同时保留最大的数据方差。这样做的目的是减少数据集的维度,尽可能保留原始数据的信息。2.算法流程1.数据中心化对原始数据进行中心化处理,即将每个特征的值减去该特征的均值,以保证数据的均值为零。pj=np.mean(X,axis=0)X_......
  • 华为eNSP实验:Eth-Trunk LACP模式
    华为eNSP实验中的Eth-TrunkLACP模式是一种高级网络配置,旨在通过聚合多个物理链路来创建一个逻辑链路,以增加带宽和提供链路冗余。LACP(LinkAggregationControlProtocol)是一个关键的协议,它支持这种链路聚合技术的动态分配和调整。下面将深入探讨Eth-TrunkLACP模式的配置和......
  • 内存:M321RYGA0PB2-CCP 96G DDR5 RDIMM,KHAA44801B-MC16、KHAA84901B-MC17、KHAA44801B-
    1、M321RYGA0PB2-CCP是一款带存储器的双列直插式存储模块,可通过添加8位奇偶校验信号,实现错误纠正。该器件支持x4/x8组织/每个DIMM和3DPC配置最高2个级别。规格类型:DDR5DIMM类型:RDIMM容量:96GB组织:2Rx4组件成分:(4Gx4)x40速率:6400Mbps工作电压:1.1V针脚数:288应......
  • 近期火热的巴西推广casino游戏推广快手视频kwai广告怎么做
    近期火热的巴西推广casino游戏推广快手视频kwai广告怎么做在巴西这个充满活力的国度,casino游戏一直以其独特的魅力吸引着众多玩家的关注。近年来,随着数字媒体的兴起,越来越多的游戏开发者选择通过快手视频kwai平台投放广告,以拓展巴西市场的用户基础。本文将详细介绍在巴西推广c......
  • 高速公路视频监控系统与车牌抓拍:EasyCVR视频监控技术助力交通道路安全监控
    随着科技的不断发展,高速公路视频监控与车牌抓拍系统作为智能交通的重要组成部分,日益发挥着不可或缺的作用。这些先进的技术不仅提高了道路交通的管理效率,也为保障行车安全提供了新的手段。高速公路视频监控系统的应用,极大地增强了道路监控的实时性和全面性。通过安装在关键路段的......
  • Windows11系统Win32_EncryptableVolume.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Win32_EncryptableVolume.dll文件(挑选合适......
  • wine-在mac上运行exe执行文件
    TouseWinetoruna.exefileonaMac,followthesesteps:Step1:InstallHomebrew(ifnotalreadyinstalled)HomebrewisapackagemanagerformacOSthatsimplifiestheinstallationofsoftware.OpenTerminal.InstallHomebrewbyrunningthefollowing......