翼度科技»论坛 编程开发 .net 查看内容

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

5

主题

5

帖子

15

积分

新手上路

Rank: 1

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

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

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

Free Spire.PDF for .NET 免费库支持两种安装方式:
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表单不可编辑。
简单代码示例:
  1. using Spire.Pdf;
  2. namespace FlattenAllFormFields
  3. {
  4.     class Program
  5.     {
  6.         static void Main(string[] args)
  7.         {
  8.             //加载PDF文件
  9.             PdfDocument pdf = new PdfDocument();
  10.             pdf.LoadFromFile("PDF表单.pdf");
  11.             //设置所有表单不可编辑
  12.             pdf.Form.IsFlatten = true;
  13.             //保存生成文件
  14.             pdf.SaveToFile("扁平PDF.pdf");
  15.         }
  16.     }
  17. }
复制代码
以上示例一键锁定了PDF文件中的所有表单,如果仅需锁定某个指定的表单域,可以参考如下代码片段:
  1.             //获取PDF表单
  2.             PdfFormWidget formWidget = (PdfFormWidget)pdf.Form;
  3.             //通过表单名获取指定表单域
  4.             PdfField form = formWidget.FieldsWidget["姓名"];
  5.             //通过索引获取指定表单域
  6.             PdfField form = formWidget.FieldsWidget.List[0] as PdfField;
  7.             //设置表单不可编辑
  8.             form.Flatten = true;
复制代码
 
使用C# 提取PDF表单数据

在Free Spire.PDF中,每种表单域都提供了对应的类。要实现PDF表单数据的提取,我们需要先确定表单域的类型,然后再使用相应类下的属性来提取它们的值。
完整C#示例代码:
  1. using Spire.Pdf;
  2. using Spire.Pdf.Fields;
  3. using Spire.Pdf.Widget;
  4. using System.IO;
  5. using System.Text;
  6. namespace ExtractFormFieldValues
  7. {
  8.     internal class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             //加载PDF文件
  13.             PdfDocument doc = new PdfDocument();
  14.             doc.LoadFromFile("PDF表单.pdf");
  15.             //创建StringBuilder对象
  16.             StringBuilder sb = new StringBuilder();
  17.             //获取PDF表单
  18.             PdfFormWidget formWidget = doc.Form as PdfFormWidget;
  19.             //遍历表单
  20.             for (int i = 0; i < formWidget.FieldsWidget.List.Count; i++)
  21.             {
  22.                 PdfField field = formWidget.FieldsWidget.List[i] as PdfField;
  23.                 //获取文本框的名称和值
  24.                 if (field is PdfTextBoxFieldWidget)
  25.                 {
  26.                     PdfTextBoxFieldWidget textBoxField = field as PdfTextBoxFieldWidget;
  27.                     string name = textBoxField.Name;
  28.                     string value = textBoxField.Text;
  29.                     sb.Append("文本框名称: " + name + "\r\n");
  30.                     sb.Append("文本框内容: " + value + "\r\n");
  31.                 }
  32.                 //获取列表框的名称、项目和选定项
  33.                 if (field is PdfListBoxWidgetFieldWidget)
  34.                 {
  35.                     PdfListBoxWidgetFieldWidget listBoxField = field as PdfListBoxWidgetFieldWidget;
  36.                     string name = listBoxField.Name;
  37.                     sb.Append("列表框名称: " + name + "\r\n");
  38.                     sb.Append("列表框项目: \r\n");
  39.                     PdfListWidgetItemCollection items = listBoxField.Values;
  40.                     foreach (PdfListWidgetItem item in items)
  41.                     {
  42.                         sb.Append(item.Value + "\r\n");
  43.                     }
  44.                     string selectedValue = listBoxField.SelectedValue;
  45.                     sb.Append("列表框选定项: " + selectedValue + "\r\n");
  46.                 }
  47.                 //获取组合框字段的名称、项目和选定项
  48.                 if (field is PdfComboBoxWidgetFieldWidget)
  49.                 {
  50.                     PdfComboBoxWidgetFieldWidget comBoxField = field as PdfComboBoxWidgetFieldWidget;
  51.                     string name = comBoxField.Name;
  52.                     sb.Append("组合框名称: " + name + "\r\n");
  53.                     sb.Append("组合框项目: \r\n");
  54.                     PdfListWidgetItemCollection items = comBoxField.Values;
  55.                     foreach (PdfListWidgetItem item in items)
  56.                     {
  57.                         sb.Append(item.Value + "\r\n");
  58.                     }
  59.                     string selectedValue = comBoxField.SelectedValue;
  60.                     sb.Append("组合框选定项: " + selectedValue + "\r\n");
  61.                 }
  62.                 //获取单选按钮的名称和所选项
  63.                 if (field is PdfRadioButtonListFieldWidget)
  64.                 {
  65.                     PdfRadioButtonListFieldWidget radioBtnField = field as PdfRadioButtonListFieldWidget;
  66.                     string name = radioBtnField.Name;
  67.                     sb.Append("单选按钮名称: " + name + "\r\n");
  68.                     string selectedValue = radioBtnField.SelectedValue;
  69.                     sb.Append("单选按钮选定项: " + selectedValue + "\r\n");
  70.                 }
  71.                 //获取复选框的名称和状态
  72.                 if (field is PdfCheckBoxWidgetFieldWidget)
  73.                 {
  74.                     PdfCheckBoxWidgetFieldWidget checkBoxField = field as PdfCheckBoxWidgetFieldWidget;
  75.                     string name = checkBoxField.Name;
  76.                     sb.Append("复选框名称: " + name + "\r\n");
  77.                     bool status = checkBoxField.Checked;
  78.                     if (status)
  79.                     {
  80.                         sb.Append("复选框状态: 已选中 \r\n");
  81.                     }
  82.                     else
  83.                     {
  84.                         sb.Append("复选框状态: 未选中 \r\n");
  85.                     }
  86.                 }
  87.                 sb.Append("\n");
  88.             }
  89.             //将提取的数据写入txt文件
  90.             File.WriteAllText("提取PDF表单.txt", sb.ToString());
  91.             doc.Dispose();
  92.         }
  93.     }
  94. }
复制代码
提取PDF表单的效果图:

 

总结

免费Spire.PDF支持多种对PDF表单的操作,使用它,我们可以通过C# 轻松实现锁定PDF表单以确保表单不被篡改或编辑,或者通过C# 快速提取PDF表单数据并用于各种用途,如数据分析、报告生成等。
如有兴趣了解更多.NET程序中操作PDF文档的示例,可点击:Spire.PDF中文教程
 

来源:https://www.cnblogs.com/Yesi/p/18252698
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具