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

清华大学学位论文LaTeX模板:thuthesis完整使用指南

清华大学学位论文LaTeX模板&#xff1a;thuthesis完整使用指南 【免费下载链接】thuthesis LaTeX Thesis Template for Tsinghua University 项目地址: https://gitcode.com/gh_mirrors/th/thuthesis 清华大学thuthesis LaTeX模板是专为清华学子设计的学位论文写作工具&…...

Wireshark 实战|HTTP 协议:浏览器和服务器是怎么聊天的?

Wireshark 实战&#xff5c;HTTP 协议&#xff1a;浏览器和服务器是怎么聊天的&#xff1f; 大家好&#xff0c;我是网域小星球&#xff0c;一名网络工程大三学生。上一篇我们拆解了 DNS 域名解析&#xff0c;今天我们继续往下走&#xff0c;看看拿到 IP 地址后&#xff0c;浏…...

本地部署Qwen3大模型+OpenClaw接入实战教程:从零实现私有化AI助手

> **标签**: AI开发,大模型,Ollama,OpenClaw,Python,本地部署 > **阅读时间**: 约15分钟 > **难度**: 中级## 一、引言本地部署大模型可确保**数据不出境、不上云**&#xff0c;满足金融、医疗等行业的合规要求&#xff1b;同时长期使用成本更低&#xff0c;适合高频…...

手把手教你用XTTS v2克隆自己的声音:从录音到生成的完整避坑指南

零基础玩转XTTS v2语音克隆&#xff1a;从录音到生成的保姆级实战手册 1. 语音克隆技术的前世今生 语音合成技术&#xff08;TTS&#xff09;的发展已经走过了数十年的历程。从早期的机械式发音到如今的神经网络语音合成&#xff0c;技术的进步让语音克隆变得越来越自然。XTTS …...

别再乱用#0延迟了!一个SystemVerilog仿真波形出现X态的踩坑实录

SystemVerilog仿真中的X态陷阱&#xff1a;从#0延迟到事件队列的深度解析 引言&#xff1a;一个令人抓狂的仿真问题 上周五凌晨2点17分&#xff0c;我的显示器上VCS仿真波形中那个刺眼的红色X态信号让我彻底清醒了。这已经是第三次在项目交付前遇到这种诡异的仿真问题——明明R…...

DataGrip安装使用全攻略 (DataGrip更改新建查询存储默认位置)

一、DataGrip安装 下载 DataGrip 安装包 访问 DataGrip 官网:https://www.jetbrains.com/datagrip/download ,下载 DataGrip 2025.3.5 版本的安装包: 我这里也有安装包 链接: https://pan.baidu.com/s/1g5aiHWsv9VyIhFD-7TBdEg?pwd=0908 提取码: 0908 --来自百度网盘超…...

零代码玩转视觉定位:基于Qwen2.5-VL的Chord模型,Gradio界面快速上手

零代码玩转视觉定位&#xff1a;基于Qwen2.5-VL的Chord模型&#xff0c;Gradio界面快速上手 1. 视觉定位技术简介 视觉定位&#xff08;Visual Grounding&#xff09;是一项让计算机能够理解自然语言描述并在图像中精确定位目标对象的技术。想象一下&#xff0c;当你对计算机…...

浦语灵笔2.5-7B错误排查:常见问题与解决方案大全

浦语灵笔2.5-7B错误排查&#xff1a;常见问题与解决方案大全 1. 开场&#xff1a;为什么你总在部署时卡住&#xff1f; 刚下载完浦语灵笔2.5-7B模型&#xff0c;满怀期待地准备跑通第一个图像理解任务&#xff0c;结果终端里跳出一串红色报错——显存不足、模块找不到、token…...

Gatling性能测试结果版本控制终极指南:追踪与对比性能指标的最佳实践

Gatling性能测试结果版本控制终极指南&#xff1a;追踪与对比性能指标的最佳实践 【免费下载链接】gatling Modern Load Testing as Code 项目地址: https://gitcode.com/gh_mirrors/ga/gatling Gatling是一款现代化的负载测试工具&#xff0c;采用代码即测试的理念&…...

网络工程师日记--企业内外网访问控制与网络架构搭建实践

前言企业网络搭建与运维中&#xff0c;合理的网络架构分层与精细化的访问控制策略是保障网络安全、提升业务可用性的核心。本文结合实际网络拓扑场景&#xff0c;从架构设计、需求分析、策略配置三个维度&#xff0c;讲解企业内网与外网的访问控制实现及网络架构搭建要点学习目…...