PDF嵌入隱藏的文字

所需依賴

<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…