所需依赖

<dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>9.0.0</version><type>pom</type>
</dependency>

源码

/*** PDF工具*/
public class PdfUtils {/*** 在 PDF 中嵌入字段* 在现有 PDF 文档中添加表单字段及其值** @param pdfBytes   原 PDF 文档的字节数组* @param filedName  要嵌入的字段名称* @param fieldValue 要嵌入的字段值* @return 嵌入字段后的 PDF 字节数组* @throws ServiceException 如果嵌入过程中发生错误*/public static byte[] embedField(byte[] pdfBytes, String filedName, String fieldValue) {try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {// 创建 PDF 文档对象,读取源 PDF 并指定输出流PdfDocument pdfDoc = new PdfDocument(new PdfReader(new ByteArrayInputStream(pdfBytes)),new PdfWriter(baos));// 获取 PDF 第一页对象PdfObject pdfObject = pdfDoc.getPdfObject(1);// 获取或创建 PDF 表单PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, true);// 创建表单字段PdfFormField pdfFormField = new PdfFormField((PdfDictionary) pdfObject);// 设置字段名称pdfFormField.setFieldName(filedName);// 设置字段值pdfFormField.setValue(fieldValue);// 设置字段为只读pdfFormField.setFieldFlags(PdfFormField.FF_READ_ONLY);// 将字段添加到表单中form.addField(pdfFormField);// 关闭文档并写入输出流pdfDoc.close();// 返回处理后的 PDF 字节数组return baos.toByteArray();} catch (Exception e) {// 发生异常时抛出服务异常throw new ServiceException(0, "嵌入PDF字段失败");}}/*** 从 PDF 中获取指定字段的值** @param pdfBytes  PDF 字节数组* @param filedName 要获取的字段名称* @return 字段值,如果字段不存在则返回 null* @throws ServiceException 如果获取过程中发生错误*/public static String getField(byte[] pdfBytes, String filedName) {try (PdfDocument pdfDoc = new PdfDocument(new PdfReader(new ByteArrayInputStream(pdfBytes)))) {// 获取 PDF 表单,不自动创建PdfAcroForm form = PdfAcroForm.getAcroForm(pdfDoc, false);if (form == null) {// 如果表单不存在,返回 nullreturn null;}// 获取指定名称的字段PdfFormField field = form.getField(filedName);if (field == null) {// 如果字段不存在,返回 nullreturn null;}// 返回字段值的字符串表示return field.getValueAsString();} catch (Exception e) {// 发生异常时抛出服务异常throw new ServiceException(0, "获取PDF字段处理失败");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/79238.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/79238.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/79238.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RAG工程-基于LangChain 实现 Advanced RAG(预检索-查询优化)(下)

Multi-Query 多路召回 多路召回流程图 多路召回策略利用大语言模型&#xff08;LLM&#xff09;对原始查询进行拓展&#xff0c;生成多个与原始查询相关的问题&#xff0c;再将原始查询和生成的所有相关问题一同发送给检索系统进行检索。它适用于用户查询比较宽泛、模糊或者需要…

【业务领域】PCIE协议理解

PCIE协议理解 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 PCIE学习理解。 文章目录 PCIE协议理解[TOC](文章目录) 前言零、PCIE掌握点&#xff1f;一、PCIE是什么&#xff1f;二、PCIE协议总结物理层切速 链路层事务层6.2 TLP的路…

Jupyter notebook快捷键

文章目录 Jupyter notebook键盘模式快捷键&#xff08;常用的已加粗&#xff09; Jupyter notebook键盘模式 命令模式&#xff1a;键盘输入运行程序命令&#xff1b;这时单元格框线为蓝色 编辑模式&#xff1a;允许你往单元格中键入代码或文本&#xff1b;这时单元格框线是绿色…

Unity图片导入设置

&#x1f3c6; 个人愚见&#xff0c;没事写写笔记 &#x1f3c6;《博客内容》&#xff1a;Unity3D开发内容 &#x1f3c6;&#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f50e;Unity支持的图片格式 ☀️BMP:是Windows操作系统的标准图像文件格式&#xff0c;特点是…

Spark-小练试刀

任务1&#xff1a;HDFS上有三份文件&#xff0c;分别为student.txt&#xff08;学生信息表&#xff09;result_bigdata.txt&#xff08;大数据基础成绩表&#xff09;&#xff0c; result_math.txt&#xff08;数学成绩表&#xff09;。 加载student.txt为名称为student的RDD…

内存安全的攻防战:工具链与语言特性的协同突围

一、内存安全&#xff1a;C 开发者永恒的达摩克利斯之剑 在操作系统内核、游戏引擎、金融交易系统等对稳定性要求苛刻的领域&#xff0c;内存安全问题始终是 C 开发者的核心挑战。缓冲区溢出、悬空指针、双重释放等经典漏洞&#xff0c;每年在全球范围内造成数千亿美元的损失。…

OceanBase数据库-学习笔记1-概论

多租户概念 集群和分布式 随着互联网、物联网和大数据技术的发展&#xff0c;数据量呈指数级增长&#xff0c;单机数据库难以存储和处理如此庞大的数据。现代应用通常需要支持大量用户同时访问&#xff0c;单机数据库在高并发场景下容易成为性能瓶颈。单点故障是单机数据库的…

计算机网络——键入网址到网页显示,期间发生了什么?

浏览器做的第一步工作是解析 URL&#xff0c;分清协议是http还是https&#xff0c;主机名&#xff0c;路径名&#xff0c;然后生成http消息&#xff0c;之后委托操作系统将消息发送给 Web 服务器。在发送之前&#xff0c;还需要先去查询dns&#xff0c;首先是查询缓存浏览器缓存…

Qwen3本地化部署,准备工作:SGLang

文章目录 SGLang安装deepseek运行Qwen3-30B-A3B官网:https://github.com/sgl-project/sglang SGLang SGLang 是一个面向大语言模型和视觉语言模型的高效服务框架。它通过协同设计后端运行时和前端编程语言,使模型交互更快速且具备更高可控性。核心特性包括: 1. 快速后端运…

全面接入!Qwen3现已上线千帆

百度智能云千帆正式上线通义千问团队开源的最新一代Qwen3系列模型&#xff0c;包括旗舰级MoE模型Qwen3-235B-A22B、轻量级MoE模型Qwen3-30B-A3B。千帆大模型平台开源模型进一步扩充&#xff0c;以多维开放的模型服务、全栈模型开发、应用开发工具链、多模态数据治理及安全的能力…

蓝桥杯Python(B)省赛回忆

Q&#xff1a;为什么我要写这篇博客&#xff1f; A&#xff1a;在蓝桥杯软件类竞赛&#xff08;Python B组&#xff09;的备赛过程中我在网上搜索关于蓝桥杯的资料&#xff0c;感谢你们提供的参赛经历&#xff0c;对我的备赛起到了整体调整的帮助&#xff0c;让我知道如何以更…

数据转储(go)

​ 随着时间推移&#xff0c;数据库中的数据量不断累积&#xff0c;可能导致查询性能下降、存储压力增加等问题。数据转储作为一种有效的数据管理策略&#xff0c;能够将历史数据从生产数据库中转移到其他存储介质&#xff0c;从而减轻数据库负担&#xff0c;提高系统性能&…

Git Stash 详解

Git Stash 详解 在使用 Git 进行版本控制时&#xff0c;经常会遇到需要临时保存当前工作状态的情况。git stash 命令就是为此设计的&#xff0c;它允许你将未提交的更改暂存起来&#xff0c;在处理其他任务或分支后&#xff0c;再恢复这些更改。 目录 基本概念常用命令示例和…

Windows下Dify安装及使用

Dify安装及使用 Dify 是开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力&#xff0c;轻松构建和运营生成式 AI 原生应用。比 LangChain 更易用。 前置条件 windows下安装了docker环境-Windows11安装Docker-CSDN博客 下载 Git下载…

Clang-Tidy协助C++编译期检查

文章目录 在Visual Studio中启用clang-tidyClang-tidy 常用的检查项readability-inconsistent-declaration-parameter-namemisc-static-assert 例子 C/C语言是一门编译型语言&#xff0c;比起python,javascript 这些&#xff0c;有很多BUG可以在编译期被排除掉&#xff0c;当然…

智能工厂规划学习——深入解读数字化工厂规划与建设方案

项目总体思路聚焦于通过智能制造和数字化工厂建设,来优化企业战略并提升信息化水平。首先,企业需学习先进国家已经验证的先进经验,并紧跟其正在变革的方向,以确保自身发展的前瞻性和竞争力。 在企业战略层面,企业正从以产品为中心的业务模式,逐步转变为以服务中心…

Go RPC 服务方法签名的要求

在 Go 中&#xff0c;RPC 方法的签名有严格的要求&#xff0c;主要是为了保证方法的调用能够通过网络正确地传输和解析。具体要求如下&#xff1a; 1. 方法必须是导出的 RPC 服务的方法必须是导出的&#xff08;即首字母大写&#xff09;。这是因为 Go 的反射机制要求服务方法…

上位机 日志根据类型显示成不同颜色

前言 在上位机软件开发中日志是一个很重要的信息。一方面显示系统的运行情况,另一方面主要用于排查软件BUG和设备问题的重要参考。为了方面识别日志类型最好的方式是使用不同的颜色进行区分。这样就一目了然了。 效果 实现代码 1.根据 ListBox 控件 进行扩展了一个自定义控件…

CMake解析参数用法示例

cmake_parse_arguments 是 CMake 中用于解析函数或宏参数的工具&#xff0c;特别适合处理带有选项&#xff08;OPTIONS&#xff09;、单值参数&#xff08;SINGLE_ARGS&#xff09;和多值参数&#xff08;MULTI_ARGS&#xff09;的复杂参数列表。以下是用法说明和一个示例&…

自定义JackSon配置

避免前端&#xff08;JavaScript&#xff09;处理大数&#xff08;如 Long、BigInteger&#xff09;时发生精度丢失问题&#xff0c;所以引入了自定义 Jackson 配置。 先看代码&#xff1a; /** 根据id修改员工信息*/PutMappingpublic R<String> update(HttpServletRequ…