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表单不可编辑的资料请关注代码网其它相关文章!
发表评论