• C# 设置PDF表单不可编辑、或提取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中文教程

     

  • 相关阅读:
    9.29 校招 实习 内推 面经
    noip2011选择旅馆
    深入理解 python 虚拟机:生成器停止背后的魔法
    SpringBoot之Dockerfile
    维修一款20年前的电容测试表VC6013
    Unity 2D SpriteRenderer filled Shader实现
    unity urp 衣服渲染
    几道web题目
    微服务学习第四十四节 Sentinel整合GateWay
    Python打造一个词云制作软件
  • 原文地址:https://www.cnblogs.com/Yesi/p/18252698