当前位置: 代码网 > it编程>编程语言>C# > C#设置PDF表单不可编辑以及提取表单数据的操作

C#设置PDF表单不可编辑以及提取表单数据的操作

2024年07月03日 C# 我要评论
pdf表单是pdf中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从pdf表单中提取数据以便后续处理或分析。之前文

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表单不可编辑。

简单代码示例:

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com