pdf表单是pdf中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从pdf表单中提取数据以便后续处理或分析。
之前文章详细介绍过如何使用免费spire.pdf库通过c# 创建、填写表单,本文将继续介绍该免费.net pdf库支持的另外两种操作pdf表单的功能,即:
- 使用c# 设置pdf表单不可编辑(pdf扁平化)
- 使用c# 提取pdf表单数据
免费库安装(2种方法):
free spire.pdf for .net 免费库支持两种安装方式:
- 通过 nuget安装:http://www.nuget.org/packages/freespire.pdf/
- 点击下载产品包,解压缩后手动引用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表单数据并用于各种用途,如数据分析、报告生成等。
以上就是c#设置pdf表单不可编辑以及提取表单数据的操作的详细内容,更多关于c#设置pdf表单不可编辑的资料请关注代码网其它相关文章!
发表评论