PDF Base64格式字符串轉換為PDF文件臨時文件

需求描述:

????????在對接電子病歷系統與河北CA,進行免密文件簽章的時候,兩者系統入參不同,前者是pdf文件,base64格式;后者要求File類型的PDF文件。

????????在業務中間層開發時,則需要接收EMR側提供的base64格式字符串,并將其轉化為臨時PDF文件(支持指定位置,若無則默認存于當前用戶下的臨時文件目錄),以供CA側進行文件簽。

注意事項:

  • 資源管理:ByteArrayInputStream?和?FileOutputStream?都是需要顯式關閉的資源。可以使用?try-with-resources?來自動管理這些資源,避免資源泄漏。
  • Base64 編碼與解碼優化(優化點,考慮病歷文件最多10M左右,則無需考慮此問題):Base64.getEncoder().encodeToString() 和 Base64.getDecoder().decode() 可以處理較大的文件,但對于大文件,使用流的方式進行分塊處理會更加高效,避免內存溢出。

代碼實現邏輯:

  1. 將 PDF 文件轉換為 Base64 編碼字符串:

    • convertPdfToBase64()方法讀取文件內容并將其轉換為 Base64 字符串。
  2. 將 Base64 字符串轉換回 PDF 文件:

    • convertBase64ToPdfInMemory()方法將 Base64 字符串解碼,并返回?ByteArrayInputStream,其中包含轉換后的 PDF 數據。
  3. 將內存中的 PDF 寫入臨時文件:

    • createTempFileFromStream()方法接受一個?ByteArrayInputStream,并將其中的字節數據寫入到臨時文件。
  4. 刪除臨時文件:

    • 文件處理完畢后,程序刪除臨時文件。
package com.bsoft.server.utils;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;public class PdfToBase64Converter {public static void main(String[] args) {String pdfFilePath = "C:\\Users\\19079\\Desktop\\123.pdf"; // 替換為你的輸入PDF文件路徑String tempDirPath = "C:\\Users\\19079\\Desktop"; // 替換為你想要的臨時目錄路徑,留空則使用默認臨時目錄try {// 將 PDF 轉換為 Base64String base64String = convertPdfToBase64(pdfFilePath);System.out.println("Base64 Encoded PDF:");System.out.println(base64String);// 將 Base64 轉換回內存中的 PDFByteArrayInputStream pdfInMemory = convertBase64ToPdfInMemory(base64String);// 將內存中的 PDF 寫入臨時文件File tempFile = createTempFileFromStream(pdfInMemory, tempDirPath);System.out.println("臨時 PDF 文件創建位置: " + tempFile.getAbsolutePath());// 現在,您可以使用 tempFile 進行進一步處理System.out.println("PDF 文件大小: " + tempFile.length() + " bytes");// TODO 根據需要處理文件...// 處理后刪除臨時文件if (tempFile.delete()) {System.out.println("已成功刪除臨時文件。");} else {System.out.println("無法刪除臨時文件。");}} catch (IOException e) {System.err.println("IOException occurred: " + e.getMessage());e.printStackTrace();}}public static String convertPdfToBase64(String filePath) throws IOException {byte[] fileContent = Files.readAllBytes(Paths.get(filePath));return Base64.getEncoder().encodeToString(fileContent);}public static ByteArrayInputStream convertBase64ToPdfInMemory(String base64String) throws IOException {byte[] decodedBytes = Base64.getDecoder().decode(base64String);return new ByteArrayInputStream(decodedBytes);}public static File createTempFileFromStream(ByteArrayInputStream inputStream, String dirPath) throws IOException {File tempDir = (dirPath != null && !dirPath.isEmpty()) ? new File(dirPath) : new File(System.getProperty("java.io.tmpdir"));if (!tempDir.exists()) {throw new IOException("指定目錄不存在: " + dirPath);}// 創建臨時文件File tempFile = Files.createTempFile(tempDir.toPath(), "temp", ".pdf").toFile();// 確保 JVM 退出時刪除該文件tempFile.deleteOnExit();// 使用 try-with-resources 自動關閉資源try (FileOutputStream fos = new FileOutputStream(tempFile)) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = inputStream.read(buffer)) != -1) {fos.write(buffer, 0, bytesRead);}}return tempFile;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80934.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80934.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80934.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼隨想錄訓練營第二十三天| 572.另一顆樹的子樹 104.二叉樹的最大深度 559.N叉樹的最大深度 111.二叉樹的最小深度

572.另一顆樹的子樹: 狀態:已做出 思路: 這道題目當時第一時間不是想到利用100.相同的樹思路來解決,而是先想到了使用kmp,不過這個題目官方題解確實是有kmp解法的,我使用的暴力解法,kmp的大致思…

【RabbitMq C++】消息隊列組件

RabbitMq 消息隊列組件 1. RabbitMq介紹2. 安裝RabbitMQ3. 安裝 RabbitMQ 的 C客戶端庫4. AMQP-CPP 庫的簡單使用4.1 使用4.1.1 TCP 模式4.1.2 擴展模式 4.2 常用類與接口介紹4.2.1 Channel4.3.2 ev 5. RabbitMQ樣例編寫5.1 發布消息5.2 訂閱消息 1. RabbitMq介紹 RabbitMq - …

鴻蒙NEXT開發動畫案例8

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件,代碼如下: /*** SpinKit動畫組件 (重構版)* author: CSDN-鴻蒙布道師* since: 2025/05/14*/interface AnimationGroup {indexes: number[];delay: number; }ComponentV2 export struct SpinEight {Re…

MySQL全局優化

目錄 1 硬件層面優化 1.1 CPU優化 1.2 內存優化 1.3 存儲優化 1.4 網絡優化 2 系統配置優化 2.1 操作系統配置 2.2 MySQL服務配置 3 庫表結構優化 4 SQL及索引優化 mysql可以從四個層面考慮優化,分別是 硬件系統配置庫表結構SQL及索引 從成本和優化效果來看&#xf…

vue和springboot交互數據,使用axios【跨域問題】

vue和springboot交互數據,使用axios【跨域問題】 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是node.js和vue的使用。前后每一小節的內容是存在的有:學習and理解的關聯性。【幫幫志系列文章】&…

FFMPEG 與 mp4

1. FFmpeg 中的 start_time 與 time_base start_time 流的起始時間戳(單位:time_base),表示第一幀的呈現時間(Presentation Time)。通常用于同步多個流(如音頻和視頻)。 time_base …

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂 ——論過度依賴AI創作對技術進化的反噬 一、數據生態的惡性循環:AI的“自噬危機” 當前AI模型的訓練依賴于人類創造的原始數據——書籍、論文、藝術作品、社交媒體動態等。據統計,2025年全球…

C++【STL】(2)string

C【STL】string用法擴展 1. assign:為字符串賦新值 用于替換字符串內容,支持多種參數形式。 常用形式: // 用另一個字符串賦值 str.assign("Hello World");// 用另一個字符串的子串(從第6個字符開始,取5…

樹莓派4基于Debian GNU/Linux 12 (Bookworm)開啟VNC,使用MobaXterm連接VNC出現黑屏/灰屏問題

1. 開啟樹莓派的VNC服務 啟用VNC服務:通過raspi-config開啟 # 1. 通過 raspi-config 工具開啟 sudo raspi-config選擇 Interface Options → VNC → Yes退出時會自動啟動服務 檢查服務狀態: sudo systemctl status vncserver-x11-serviced正常輸出應顯示…

MongoDB使用x.509證書認證

文章目錄 自定義證書生成CA證書生成服務器之間的證書生成集群證書生成用戶證書 MongoDB配置java使用x.509證書連接MongoDBMongoShell使用證書連接 8.0版本的mongodb開啟復制集,配置證書認證 自定義證書 生成CA證書 生成ca私鑰: openssl genrsa -out ca…

Python爬蟲實戰:研究js混淆加密

一、引言 在當今數字化時代,數據已成為推動各行業發展的核心驅動力。網絡爬蟲作為一種高效的數據采集工具,能夠從互聯網上自動獲取大量有價值的信息。然而,隨著互聯網技術的不斷發展,許多網站為了保護自身數據安全和知識產權,采用了 JavaScript 混淆加密技術來防止數據被…

Java項目層級介紹 java 層級 層次

java 層級 層次 實體層 控制器層 數據連接層 Service : 業務處理類 Repository :數據庫訪問類 Java項目層級介紹 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java項目中,層級結構(Layered Architecture&#xf…

網絡安全頂會——SP 2025 論文清單與摘要

1、"Check-Before-you-Solve": Verifiable Time-lock Puzzles 時間鎖謎題是一種密碼學原語,它向生成者保證該謎題無法在少于T個順序計算步驟內被破解。近年來,該技術已在公平合約簽署和密封投標拍賣等場景中得到廣泛應用。然而,求解…

《100天精通Python——基礎篇 2025 第18天:正則表達式入門實戰,解鎖字符串處理的魔法力量》

目錄 一、認識正則表達式二、正則表達式基本語法2.1 行界定符2.2 單詞定界符2.3 字符類2.4 選擇符2.5 范圍符2.6 排除符2.7 限定符2.8 任意字符2.9 轉義字符2.10 反斜杠2.11 小括號2.11.1 定義獨立單元2.11.2 分組 2.12 反向引用2.13 特殊構造2.14 匹配模式 三、re模塊3.1 comp…

思邁特軟件攜手天陽科技,打造ChatBI金融智能分析新標桿

5月10日,廣州思邁特軟件有限公司(以下簡稱“思邁特軟件”)與天陽宏業科技股份有限公司(以下簡稱“天陽科技”)在北京正式簽署戰略合作協議。思邁特軟件董事長吳華夫、CEO姚詩成,天陽科技董事長兼總裁歐陽建…

OPENSSL-1.1.1的使用及注意事項

下載鏈接: OpenSSL1.1.1一個廣泛使用的開源加密庫資源-CSDN文庫 OpenSSL 1.1.1 是一個廣泛使用的開源加密庫,以下是其使用方法及注意事項: 使用方法 安裝: Linux系統: 從源碼編譯安裝:訪問 OpenSSL 官網…

數據庫優化

一、慢 SQL 排查全流程 1. 開啟慢查詢日志:精準定位問題 SQL 慢查詢日志是定位性能問題的首要工具,通過記錄執行超時或未使用索引的 SQL,為優化提供依據。 配置步驟: ① 臨時啟用(生效至服務重啟) sql …

GO語言-導入自定義包

文章目錄 1. 項目目錄結構2. 創建自定義包3. 初始化模塊4. 導入自定義包5. 相對路徑導入 在Go語言中導入自定義包需要遵循一定的目錄結構和導入規則。以下是詳細指南(包含兩種方式): 1. 項目目錄結構 方法1:適用于Go 1.11 &#…

記錄算法筆記(2025.5.11) 二叉樹的中序遍歷

給定一個二叉樹的根節點 root ,返回 它的 中序 遍歷 。 示例 1: 輸入:root [1,null,2,3] 輸出:[1,3,2] 示例 2: 輸入:root [] 輸出:[] 示例 3: 輸入:root [1] …

【iptables防火墻】 -- DDos防御

最近有客戶要定制路由器的默認防火墻等級,然后涉及到了DDos規則,對比客戶提供的規則發現我們現有的規則存在明顯的錯誤,在此記錄一下如何使用iptables防護DDoS攻擊 直接貼一下規則 #開啟TCP SYN Cookies 機制 sysctl -w net.ipv4.tcp_synco…