C# 设置PDF表单不可编辑、或提取PDF表单数据
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
下载免费 Spire.PDFDownload free .NET/Wpf PDF library to read, create, manipulate, convert & print PDF documents.
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表单数据并用于各种用途,如数据分析、报告生成等。
如有兴趣了解更多.NET程序中操作PDF文档的示例,可点击:
Spire.PDF for .NET 中文教程Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、读取、写入、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。同时兼容大部分国产操作系统,...
https://www.e-iceblue.cn/spirepdfnet/spire-pdf-for-net-program-guide-content.html?t=1718258675638
相关文章:
C# 设置PDF表单不可编辑、或提取PDF表单数据
PDF表单是PDF中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…...
面试篇-求两个有序数组的交集
题目 两个有序数组,第一个有序数组m是1000w个元素,第二个有序数组n是1000个元素,求交集,需要考虑时间复杂度和空间复杂度。 解题思路 解法1:遍历小数组n,在m数组中进行折半查找,根据数组有序…...
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 是一个工具,可用于优化 Kubernetes 集群中 Pod 的部署位置。它可以找到可以移动的 Pod,并将其驱逐,让默认调度器将它们重新调度到更合适的节点上。 Prowler Prowler 是一款适用于 AWS、Azure、GCP …...
低版本火狐浏览器报错:class is a reserved identifier
低版本火狐浏览器报错:class is a reserved identifier 原因:react-dnd,dnd-core 等node包的相关依赖有过更新,使得在低版本火狐浏览器中不支持 class 解决方法:在使用webpack打包构建时,编译排除node_modu…...
掌握高等数学、线性代数、概率论所需数学知识及标题建议
在数学的广袤领域中,高等数学、线性代数和概率论作为三大核心分支,不仅在理论研究中占据重要地位,更在实际应用中发挥着举足轻重的作用。为了深入理解和掌握这三门学科,我们需要掌握一系列扎实的数学知识。 高等数学所需数学知识 …...
value_and_grad
value_and_grad 是 JAX 提供的一个便捷函数,它同时计算函数的值和其梯度。这在优化过程中非常有用,因为在一次函数调用中可以同时获得损失值和相应的梯度。 以下是对 value_and_grad(loss, argnums0, has_auxFalse)(params, data, u, tol) 的详细解释&a…...
AI 已经在污染互联网了。。赛博喂屎成为现实
大家好,我是程序员鱼皮。这两年 AI 发展势头迅猛,更好的性能、更低的成本、更优的效果,让 AI 这一曾经高高在上的技术也走入大众的视野,能够被我们大多数普通人轻松使用,无需理解复杂的技术和原理。 其中,…...
Linux系统安装ODBC驱动,统信服务器E版安装psqlodbc方法
应用场景 硬件/整机信息:AMD平台 OS版本信息:服务器e版 软件信息:psqlodbc 12.02版本 功能介绍 部分用户在使用etl工具连接数据库时,需要使用到odbc驱动,下面介绍下服务器e版系统中编译安装此工具的相关过程。 E…...
品牌对电商平台价格的监测流程
在当今的电商时代,品牌商会重点关注众多电商平台,如淘宝、天猫、京东、拼多多、苏宁、小红书、抖音、快手等。之所以这些平台备受瞩目,很大程度上是因为其上的店铺数量众多,情况复杂。如今,无论是品牌的经销商还是非经…...
osgearth提示“simple.earth: file not handled”
在用vcpkg编译完osg和osgearth后,为了验证osgearth编译是否正确,进行测试,模型加载代码如下: root->addChild(osgDB::readNodeFile("simple.earth")); 此时以为是simple.earth路径的问题,遂改为以下代码…...
hbuilderx如何打包ios app,如何生成证书
hbuilderx可以打包ios app, 但是打包的时候,却需要两个证书文件,我们又如何生成这两个证书文件呢? 点击hbuilderx的官网链接,教程是需要使用mac电脑苹果开发者账号去创建这两个文件,可是问题来了,我们没有…...
扩散模型荣获CVPR2024最佳论文奖,最新成果让评估和改进生成模型更加效率!
CVPR 2024最佳论文奖新鲜出炉 其中一篇是Rich Human Feedback for Text-to-Image Generation,受大模型中的RLHF技术启发,团队用人类反馈来改进Stable Diffusion等文生图模型。 作者提出了收集丰富的细粒度人类反馈信息,用于更好地评估和改进…...
通过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样式中, pointer-…...
汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长
汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…...
智慧校园软件解决方案:提升学校管理效率的最佳选择
在当今教育领域,智慧校园信息化方案正逐渐成为提升学校管理水平与教学品质的关键途径。这一方案融合了最新科技,通过数字化、网络化及智能化方式,全面革新教育资源分配与教育互动模式,旨在为学校带来以下核心价值与优势 1. 综合信…...
数据结构之B数
目录 1.概述 2.特点 3.诞生 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 6.C语言中的B树实现例子 7.总结 1.概述 B树(B-tree)是一种自平衡的树数据结构,广泛应用于数据库和文件系统中,以便高效地进行顺序读取、写入以及查找…...
计算机基础必须知道的76个常识!沈阳计算机软件培训
01 信息技术是指人们获取、存储、传递、处理、开发和利用信息资源的相关技术。 02 1、计算机的特点: (1)运算速度快 (2)存储容量大 (3)通用性强 (4)工作自动化 &…...
7,KQM模块的驱动
1,查资料,查模块的通信接口(单片机和模块之间采用什么方式通信)硬件接口,驱动方式(串口驱动用串口发送接收PC10,PC11) 只用了三个脚:VCC GND T&…...
软件验收测试报告模版分享,如何获取专业的验收测试报告?
软件验收测试报告是对软件开发过程中的最后一步确认,通过对软件进行全面、系统的检查和测试,形成一份详细的报告,以评估软件是否满足用户需求和设计要求。验收测试报告起到了非常重要的作用,不仅可以帮助开发者了解软件开发的质量…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
