当前位置: 首页 > 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;不仅可以帮助开发者了解软件开发的质量…...

【arm扩容】docker load -i tar包 空间不足

背景&#xff1a; 首先我在/home/nvidia/work下导入了一些镜像源码tar包。然后逐个load进去。当我 load -i dev-aarch64-18.04-20210423_2000.tar包的时候&#xff0c;出现 Error processing tar file(exit status 1): write /9818cf5a7cbd5a828600d9a4d4e62185a7067e2a6f2ee…...

基于PID的直流电机自动控制系统的设计【MATLAB】

摘 要 本文在广泛查阅资料&#xff0c;了解直流电机特性的基础上&#xff0c;对直流电机的控制原理进行了的研究&#xff0c;设计了一款基于PID控制器的简单直流电机自动控制系统。 首先&#xff0c;分析了直流电机的应用背景和发展现状&#xff0c;对直流电机的工作原理和数学…...

MySQL----事务

MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如&#xff0c;在学校管理系统中&#xff0c;我们删除一个学生&#xff0c;既需要删除学生的基本资料&#xff0c;也要删除和该学生相关的信息&#xff0c;如班级&#xff0c;考试成绩等等&#xff0c;这样&#…...

客观评价,可道云teamOS搭建的企业网盘,如Windows本地电脑一般的使用体验真的蛮不错

不管是企业网盘还是私有网盘&#xff0c;简单易用一直是我比较在意的。快速能上手使用&#xff0c;甚至不需要习惯一套新的操作逻辑&#xff0c;代表着不需要学习适应&#xff0c;能够迅速投入正常使用。 在这个过程中&#xff0c;可道云teamos以其Windows电脑般的流畅体验&am…...

当页面中有多个echarts图表的时候,resize不生效的修改方法

一、本来的代码 var myChart1 this.$echarts.init(document.getElementById(‘xxxx’)); let option {}; myChart1.setOption(option); setTimeout(function () {window.onresize function () {myChart1.resize();} }, 200) 二、修改后的代码 var myChart1 this.$echart…...

connect-caption-and-trace——用于共同建模图像、文本和人类凝视轨迹预测

介绍 论文地址&#xff1a;https://arxiv.org/abs/2105.05964 源码地址&#xff1a;https://github.com/facebookresearch/connect-caption-and-trace 在过去&#xff0c;计算机视觉和自然语言处理领域的模型和算法的发展只有偶尔的重叠&#xff0c;但近年来&#xff0c;这两…...

iOS API方法弃用警告说明及添加

一、常见系统方法警告或说明释义 NS_DEPRECATED_IOS(6_0, 8_0) 释义&#xff1a;iOS用&#xff1b;且在6.0被引用&#xff0c;将在8.0后废弃此方法。NS_DEPRECATED(6_0, 6_6, 8_0, 8_8) 释义&#xff1a;MacOS与iOS中都可用&#xff1b;但Mac系统中是在6.0被引用&#xff0c;6…...

canvas绘制红绿灯路口(二)

系列文章 canvas绘制红绿灯路口&#xff08;一&#xff09; 无图不欢&#xff0c;先上图 优化项&#xff1a; 一&#xff1a;加入人行道红绿信号 二&#xff1a;加入专用车道标识&#xff08;无方向标识时采用专用车道标识&#xff09; 三&#xff1a;东南西北四项路口优化绘…...

Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope

本文主要介绍如何在无需网关&#xff0c;无需配置 HttpClient 的情况下&#xff0c;使用 Semantic Kernel 直接调用本地大模型与阿里云灵积 DashScope 等 OpenAI 接口兼容的大模型服务。 1. 背景 一直以来&#xff0c;我们都在探索如何更好地利用大型语言模型&#xff08;LLM&…...

【人工智能】深度解读 ChatGPT基本原理

ChatGPT是OpenAI开发的一种基于人工智能技术的自然语言处理工具&#xff0c;它代表了自然语言处理&#xff08;NLP&#xff09;技术的前沿进展。ChatGPT的基本原理建立在一系列先进技术和方法之上&#xff0c;主要包括GPT&#xff08;Generative Pre-trained Transformer&#…...

axure做网站好不好/seo关键词

#include <stdio.h> int main() {char a;int b;scanf("%d",&b);scanf("%c",&a); /******************************/printf("%d",b);printf("%c",a);return 0;/*应该输入一个整型一个字符型变量&#xff0c;然后把它们输…...

为什么政府网站做的很烂/企业课程培训

计算机科学与技术专业探索计算机科学与技术专业探索施朝浩(1 )这个专业是什么&#xff1a;定义&#xff1a;本专业培养具有良好的科学素养&#xff0c;系统地、较好地掌握计算机科学与技术包括计算机硬件、软件与应用的基本理论、基本知识和基本技能与方法&#xff0c;能在科研…...

iframe网站如何做统计/网站推广的主要方式

HTML5中&#xff0c;我们常常用到storage&#xff0c;那这个storage到底是什么&#xff1f; 其实&#xff0c;storage是个很简单的东西&#xff0c;只要熟悉JavaScript中对象的童鞋&#xff0c;看完小编本文的分享&#xff0c;对storage的概念及用法应该都能掌握个七七八八了。…...

兴化网站开发/网络营销有哪些模式

docker run 的时候增加参数 --storage-opt size30G docker run -it --gpus all --storage-opt size30G kevinchina/deeplearning:cuda10.1pytorch1.7.1baseenv0.1 bash设置容器磁盘大小 在 docker 启动时候 加载参数 --storage-opt dm.basesize100G 用来调整默认容器的 rootfs…...

网站开发搭建/旧版优化大师

本文件比较简单&#xff0c;代码比较少&#xff0c;主要涉及解锁后四个电机依次1/2/3/4转动&#xff0c;然后四轴也不会飞&#xff0c;只是在原地轻微转动&#xff0c;随后需要逐渐加油门至50%到达临界点&#xff0c;稍微往上推一点&#xff0c;电机声音就会发生变化&#xff0…...

怎么使用免费的wordpress/为什么打开网址都是站长工具

在Centos中yum安装和卸载软件的使用方法安装方法安装一个软件时yum -y install httpd安装多个相类似的软件时yum -y install httpd*安装多个非类似软件时yum -y install httpd php php-gd mysql 卸载一个软件时yum -y remove httpd卸载多个相类似的软件时yum -y remove httpd*卸…...