当前位置: 首页 > news >正文

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

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

之前文章详细介绍过如何使用免费Spire.PDF库通过C# 创建、填写表单,本文将继续介绍该免费.NET PDF库支持的另外两种操作PDF表单的功能,即:

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

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

Free Spire.PDF for .NET 免费库支持两种安装方式:

  1. 通过 NuGet安装:http://www.nuget.org/packages/FreeSpire.PDF/
  2. 点击下载产品包,解压缩后手动引用dll

下载免费 Spire.PDFDownload free .NET/Wpf PDF library to read, create, manipulate, convert & print PDF documents.icon-default.png?t=N7T8https://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 for .NET 中文教程Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、读取、写入、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。同时兼容大部分国产操作系统,...icon-default.png?t=N7T8https://www.e-iceblue.cn/spirepdfnet/spire-pdf-for-net-program-guide-content.html?t=1718258675638

相关文章:

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

PDF表单是PDF中的可编辑区域&#xff0c;允许用户填写指定信息。当表单填写完成后&#xff0c;有时候我们可能需要将其设置为不可编辑&#xff0c;以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…...

面试篇-求两个有序数组的交集

题目 两个有序数组&#xff0c;第一个有序数组m是1000w个元素&#xff0c;第二个有序数组n是1000个元素&#xff0c;求交集&#xff0c;需要考虑时间复杂度和空间复杂度。 解题思路 解法1&#xff1a;遍历小数组n&#xff0c;在m数组中进行折半查找&#xff0c;根据数组有序…...

Web爬虫-edu_SRC-目标列表爬取

免责声明:本文仅做技术交流与学习... 爬取后,结合暗黑搜索引擎等等进行进一步搜索. edu_src.py import requests, time from bs4 import BeautifulSoup for i in range(1, 20):url fhttps://src.sjtu.edu.cn/rank/firm/0/?page{i}print(f"正在获取第{i}页数据")s …...

云原生周刊:Harbor v2.11 版本发布 | 2024.6.17

开源项目推荐 Descheduler Descheduler 是一个工具&#xff0c;可用于优化 Kubernetes 集群中 Pod 的部署位置。它可以找到可以移动的 Pod&#xff0c;并将其驱逐&#xff0c;让默认调度器将它们重新调度到更合适的节点上。 Prowler Prowler 是一款适用于 AWS、Azure、GCP …...

低版本火狐浏览器报错:class is a reserved identifier

低版本火狐浏览器报错&#xff1a;class is a reserved identifier 原因&#xff1a;react-dnd&#xff0c;dnd-core 等node包的相关依赖有过更新&#xff0c;使得在低版本火狐浏览器中不支持 class 解决方法&#xff1a;在使用webpack打包构建时&#xff0c;编译排除node_modu…...

掌握高等数学、线性代数、概率论所需数学知识及标题建议

在数学的广袤领域中&#xff0c;高等数学、线性代数和概率论作为三大核心分支&#xff0c;不仅在理论研究中占据重要地位&#xff0c;更在实际应用中发挥着举足轻重的作用。为了深入理解和掌握这三门学科&#xff0c;我们需要掌握一系列扎实的数学知识。 高等数学所需数学知识 …...

value_and_grad

value_and_grad 是 JAX 提供的一个便捷函数&#xff0c;它同时计算函数的值和其梯度。这在优化过程中非常有用&#xff0c;因为在一次函数调用中可以同时获得损失值和相应的梯度。 以下是对 value_and_grad(loss, argnums0, has_auxFalse)(params, data, u, tol) 的详细解释&a…...

AI 已经在污染互联网了。。赛博喂屎成为现实

大家好&#xff0c;我是程序员鱼皮。这两年 AI 发展势头迅猛&#xff0c;更好的性能、更低的成本、更优的效果&#xff0c;让 AI 这一曾经高高在上的技术也走入大众的视野&#xff0c;能够被我们大多数普通人轻松使用&#xff0c;无需理解复杂的技术和原理。 其中&#xff0c;…...

Linux系统安装ODBC驱动,统信服务器E版安装psqlodbc方法

应用场景 硬件/整机信息&#xff1a;AMD平台 OS版本信息&#xff1a;服务器e版 软件信息&#xff1a;psqlodbc 12.02版本 功能介绍 部分用户在使用etl工具连接数据库时&#xff0c;需要使用到odbc驱动&#xff0c;下面介绍下服务器e版系统中编译安装此工具的相关过程。 E…...

品牌对电商平台价格的监测流程

在当今的电商时代&#xff0c;品牌商会重点关注众多电商平台&#xff0c;如淘宝、天猫、京东、拼多多、苏宁、小红书、抖音、快手等。之所以这些平台备受瞩目&#xff0c;很大程度上是因为其上的店铺数量众多&#xff0c;情况复杂。如今&#xff0c;无论是品牌的经销商还是非经…...

osgearth提示“simple.earth: file not handled”

在用vcpkg编译完osg和osgearth后&#xff0c;为了验证osgearth编译是否正确&#xff0c;进行测试&#xff0c;模型加载代码如下&#xff1a; root->addChild(osgDB::readNodeFile("simple.earth")); 此时以为是simple.earth路径的问题&#xff0c;遂改为以下代码…...

hbuilderx如何打包ios app,如何生成证书

hbuilderx可以打包ios app, 但是打包的时候&#xff0c;却需要两个证书文件&#xff0c;我们又如何生成这两个证书文件呢&#xff1f; 点击hbuilderx的官网链接&#xff0c;教程是需要使用mac电脑苹果开发者账号去创建这两个文件&#xff0c;可是问题来了&#xff0c;我们没有…...

扩散模型荣获CVPR2024最佳论文奖,最新成果让评估和改进生成模型更加效率!

CVPR 2024最佳论文奖新鲜出炉 其中一篇是Rich Human Feedback for Text-to-Image Generation&#xff0c;受大模型中的RLHF技术启发&#xff0c;团队用人类反馈来改进Stable Diffusion等文生图模型。 作者提出了收集丰富的细粒度人类反馈信息&#xff0c;用于更好地评估和改进…...

通过CSS样式来禁用href

<style>.disabled-link {pointer-events: none;cursor: default;text-decoration: none;color: inherit; }</style><a href"https://www.example.com" class"disabled-link">禁用链接</a> 在上述CSS样式中&#xff0c; pointer-…...

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…...

智慧校园软件解决方案:提升学校管理效率的最佳选择

在当今教育领域&#xff0c;智慧校园信息化方案正逐渐成为提升学校管理水平与教学品质的关键途径。这一方案融合了最新科技&#xff0c;通过数字化、网络化及智能化方式&#xff0c;全面革新教育资源分配与教育互动模式&#xff0c;旨在为学校带来以下核心价值与优势 1. 综合信…...

数据结构之B数

目录 1.概述 2.特点 3.诞生 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 6.C语言中的B树实现例子 7.总结 1.概述 B树&#xff08;B-tree&#xff09;是一种自平衡的树数据结构&#xff0c;广泛应用于数据库和文件系统中&#xff0c;以便高效地进行顺序读取、写入以及查找…...

计算机基础必须知道的76个常识!沈阳计算机软件培训

01 信息技术是指人们获取、存储、传递、处理、开发和利用信息资源的相关技术。 02 1、计算机的特点&#xff1a; &#xff08;1&#xff09;运算速度快 &#xff08;2&#xff09;存储容量大 &#xff08;3&#xff09;通用性强 &#xff08;4&#xff09;工作自动化 &…...

7,KQM模块的驱动

1&#xff0c;查资料&#xff0c;查模块的通信接口&#xff08;单片机和模块之间采用什么方式通信&#xff09;硬件接口&#xff0c;驱动方式(串口驱动用串口发送接收PC10&#xff0c;PC11) 只用了三个脚&#xff1a;VCC &#xff27;&#xff2e;&#xff24; &#xff34;&…...

软件验收测试报告模版分享,如何获取专业的验收测试报告?

软件验收测试报告是对软件开发过程中的最后一步确认&#xff0c;通过对软件进行全面、系统的检查和测试&#xff0c;形成一份详细的报告&#xff0c;以评估软件是否满足用户需求和设计要求。验收测试报告起到了非常重要的作用&#xff0c;不仅可以帮助开发者了解软件开发的质量…...

Go语言Beego框架如何用_Go语言Beego框架入门教程【高效】

Beego Controller 靠约定式反射自动注册&#xff0c;需嵌入 beego.Controller、方法名首字母大写且以 HTTP 动词开头、文件置于 controllers/ 目录下&#xff1b;路由参数用 :id 形式绑定到同名 string 参数&#xff1b;模板路径为 views/{小写控制器名}/{小写方法名}.html&…...

谷歌报告:犯罪黑客用AI发现零日漏洞,AI黑客攻击已成为现实!

AI零日漏洞攻击首现周一&#xff0c;谷歌发布报告&#xff0c;首次确认犯罪黑客使用AI大模型发现了一个此前未知的零日漏洞&#xff0c;差点发动大规模攻击。这意味着安全界担心多年的「AI自动挖洞」从理论变为现实。在Anthropic的Mythos模型已找到数千个零日漏洞的背景下&…...

3步快速上手:Windows电脑直接安装安卓应用的终极指南

3步快速上手&#xff1a;Windows电脑直接安装安卓应用的终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否渴望在Windows电脑上直接运行安卓应用&#xff…...

百度网盘macOS插件:技术探索与速度优化方案解析

百度网盘macOS插件&#xff1a;技术探索与速度优化方案解析 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 在macOS平台上使用百度网盘的用户常常面临下…...

如何利用libui-node生态构建跨平台桌面应用:Proton-Native和Vuido深度解析

如何利用libui-node生态构建跨平台桌面应用&#xff1a;Proton-Native和Vuido深度解析 【免费下载链接】libui-node Node bindings for libui, an awesome native UI library for Unix, OSX and Windows 项目地址: https://gitcode.com/gh_mirrors/li/libui-node libui-…...

产品竞争策略方法论:构建“差异化 + 结构化 + 系统化”的竞争优势

目录 一、问题与背景 二、本文将系统讲解 三、产品竞争的本质与底层逻辑 3.1 竞争的本质 3.2 竞争的三层结构(必须理解) 3.3 IoT竞争的特殊性 四、IoT产品竞争结构模型(核心框架) 4.1 五层竞争模型(核心体系) 4.2 竞争演进路径 五、五大竞争策略模型(核心方法…...

AgentDock:构建可控AI智能体的开源框架与工程实践

1. 项目概述&#xff1a;构建可控的智能体应用框架如果你正在寻找一个既能利用大语言模型&#xff08;LLM&#xff09;的创造力&#xff0c;又能确保关键业务流程稳定可靠的开发框架&#xff0c;那么 AgentDock 的出现可能正合你意。我最近深度体验了这个开源项目&#xff0c;它…...

码农的职业天花板:30岁前必须突破的5个瓶颈

在软件行业的快速迭代浪潮中&#xff0c;软件测试从业者作为质量保障的核心力量&#xff0c;正面临着愈发严峻的职业挑战。30岁&#xff0c;不仅是人生的重要分水岭&#xff0c;更是测试人职业发展的关键节点。如果不能在这个阶段突破潜藏的瓶颈&#xff0c;很可能会陷入“经验…...

Laravel DDD架构实践:使用Neuron Core构建可维护业务系统

1. 项目概述&#xff1a;一个为Laravel打造的现代化神经元网络核心如果你正在用Laravel构建一个中大型应用&#xff0c;并且已经受够了在控制器里塞满几百行业务逻辑&#xff0c;或者在模型里写满各种scope和accessor&#xff0c;让它们变得臃肿不堪&#xff0c;那么neuron-cor…...

DeepSeek R1模型API接入全流程(含鉴权失效应急手册):企业级生产环境已验证

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek R1模型API接入全流程&#xff08;含鉴权失效应急手册&#xff09;&#xff1a;企业级生产环境已验证 DeepSeek R1 是当前高性能开源大语言模型之一&#xff0c;其官方 API 提供稳定、低延迟的…...