Java在word中指定位置插入圖片。

Java使用(Poi-tl) 在word(docx)中指定位置插入圖片

  • Poi-tl 簡介
  • Maven 依賴配置
  • Poi-tl 實現原理與步驟
    • 1. 模板標簽規范
    • 2.完整實現代碼
    • 3.效果展示

Poi-tl 簡介

Poi-tl 是基于 Apache POI 的 Java 開源文檔處理庫,專注于高效操作 Word 文檔(.docx 格式)。它通過模板引擎機制簡化復雜文檔生成流程,相比原生 POI 具備更簡潔的 API、更強的靈活性和更優的性能表現,廣泛應用于報表生成、合同模板填充、文檔批量處理等企業級場景。

Maven 依賴配置

<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version>
</dependency>

Poi-tl 實現原理與步驟

1. 模板標簽規范

在 Word 模板中需使用特定格式的占位符標識圖片插入位置,標準格式為:{{@標簽名稱}}。
示例標簽格式:

{{@Head}}  <!-- 審核人簽名位置 -->
{{@Approver}}  <!-- 批準人簽名位置 -->

在這里插入圖片描述

2.完整實現代碼

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.PictureType;
import com.deepoove.poi.data.Pictures;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;/*** Word文檔圖片插入工具類* 功能:通過Poi-tl在Word模板指定位置插入圖片*/
public class WordImageInserter {/*** 主方法:執行Word圖片插入操作*/public static void main(String[] args) {Path templatePath = Path.of("D:\\template.docx");        // 源文檔模板路徑Path outputPath= Path.of("D:\\template_temp.docx"); // 新文件路徑Path inspectorImagePath = Path.of("D:\\signatures\\inspector.png"); // 審核人簽名圖片Path approverImagePath = Path.of("D:\\signatures\\approver.png");   // 批準人簽名圖片try {// 綁定模板占位符與圖片渲染對象Map<String, Object> dataModel = new HashMap<>();dataModel.put("Head", createPicture(inspectorImagePath, 100, 50));     // 替換{{@Head}}標簽dataModel.put("Approver", createPicture(approverImagePath, 100, 50)); // 替換{{@Approver}}標簽// 執行文檔渲染與圖片插入try (InputStream templateStream = Files.newInputStream(templatePath);OutputStream tempOutputStream = Files.newOutputStream(tempOutputPath)) {// 編譯模板并渲染數據XWPFTemplate template = XWPFTemplate.compile(templateStream).render(dataModel);// 輸出到臨時文件(避免直接修改原文件導致損壞)template.write(tempOutputStream);template.close();}// 原子性替換原文件(保證操作完整性)Files.move(tempOutputPath, templatePath, StandardCopyOption.REPLACE_EXISTING);System.out.println("圖片插入操作完成,文檔已更新");} catch (IOException e) {System.err.println("文檔處理異常:" + e.getMessage());e.printStackTrace();}}/*** 構建圖片渲染對象(支持尺寸自定義)* @param imagePath 圖片文件路徑* @param width 圖片寬度(像素)* @param height 圖片高度(像素)* @return 圖片渲染對象(可直接用于模板渲染)* @throws IOException 圖片讀取失敗時拋出*/private static Object createPicture(Path imagePath, int width, int height) throws IOException {// 使用NIO流加載圖片,自動識別圖片類型(此處顯式指定為PNG)return Pictures.ofStream(Files.newInputStream(imagePath), PictureType.PNG).size(width, height)  // 自定義圖片尺寸.create();           // 生成圖片渲染實體}
}

3.效果展示

在這里插入圖片描述

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

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

相關文章

遷移科技:破解紙箱拆垛場景的自動化升級密碼

一、當傳統拆垛遇上智能視覺&#xff1a;一場效率革命的必然選擇 在汽車制造基地的物流中轉區&#xff0c;每天有超過2萬件零部件紙箱需要完成拆垛分揀。傳統人工拆垛面臨三大挑戰&#xff1a; 效率瓶頸&#xff1a;熟練工人每小時處理量不超過200箱安全隱患&#xff1a;重型…

redis和redission的區別

Redis 和 Redisson 是兩個密切相關但又本質不同的技術&#xff0c;它們扮演著完全不同的角色&#xff1a; Redis: 內存數據庫/數據結構存儲 本質&#xff1a; 它是一個開源的、高性能的、基于內存的 鍵值存儲數據庫。它也可以將數據持久化到磁盤。 核心功能&#xff1a; 提供豐…

AIStarter 4.0 蘋果版體驗評測|輕松部署 ComfyUI 與 DeepSeek 的 AI 工具箱

最近在測試一款名為 AIStarter 4.0 的 AI 工具管理平臺&#xff0c;主要用于在 Mac 系統上快速部署各類開源 AI 項目&#xff0c;如 ComfyUI 和 DeepSeek &#xff0c;非常適合開發者、設計師及 AI 入門者使用。 通過簡單的拖拽操作即可完成安裝&#xff0c;支持普通下載與網盤…

ArcGIS Pro 3.4 二次開發 - 圖形圖層

環境:ArcGIS Pro SDK 3.4 + .NET 8 文章目錄 圖形圖層1.1 創建圖形圖層1.2 訪問GraphicsLayer1.3 復制圖形元素1.4 移除圖形元素2 創建圖形元素2.1 使用CIMGraphic創建點圖形元素2.2 使用CIMGraphic創建線圖元素2.3 使用 CIMGraphic 的多邊形圖形元素2.4 使用CIMGraphic創建多…

《廣度優先搜索》題集

1、模板題集 聚合一塊 2、課內題集 尋找圖中是否存在路徑 鑰匙和房間 受限條件下可到達節點的數目 3、課后題集 最少操作數 社交網絡新來的朋友 Ignatius and the Princess I Collect More Jewels Gap Nightmare Remainder Ferry Loading III 連連看 詭異的樓梯 Open the …

界面組件DevExpress WPF中文教程:Grid - 如何獲取行句柄?

DevExpress WPF擁有120個控件和庫&#xff0c;將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序&#xff0c;這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

零跑汽車5月交付45067臺車,同比增長超148%

零跑汽車在5月交付新車45,067輛&#xff0c;同比大增148%&#xff0c;連續5個月實現單月交付量增長&#xff0c;穩居新勢力交付量第一位置。今年1-5月&#xff0c;零跑累計交付新車達173,658輛&#xff0c;展現出強勁的市場競爭力和產品實力。 根據Q1財報&#xff0c;零跑不僅營…

netty中的粘包問題詳解

一起來學netty 一、粘包問題的本質二、粘包問題的成因三、Netty中的解決方案1. 固定長度解碼器(FixedLengthFrameDecoder)2. 行分隔符解碼器(LineBasedFrameDecoder)3. 分隔符解碼器(DelimiterBasedFrameDecoder)4. 長度字段解碼器(LengthFieldBasedFrameDecoder)四、解…

【基礎算法】枚舉(普通枚舉、二進制枚舉)

文章目錄 一、普通枚舉1. 鋪地毯(1) 解題思路(2) 代碼實現 2. 回文日期(1) 解題思路思路一&#xff1a;暴力枚舉思路二&#xff1a;枚舉年份思路三&#xff1a;枚舉月日 (2) 代碼實現 3. 掃雷(2) 解題思路(2) 代碼實現 二、二進制枚舉1. 子集(1) 解題思路(2) 代碼實現 2. 費解的…

利用ngx_stream_return_module構建簡易 TCP/UDP 響應網關

一、模塊概述 ngx_stream_return_module 提供了一個極簡的指令&#xff1a; return <value>;在收到客戶端連接后&#xff0c;立即將 <value> 寫回并關閉連接。<value> 支持內嵌文本和內置變量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…

Java如何權衡是使用無序的數組還是有序的數組

在 Java 中,選擇有序數組還是無序數組取決于具體場景的性能需求與操作特點。以下是關鍵權衡因素及決策指南: ?? 核心權衡維度 維度有序數組無序數組查詢性能二分查找 O(log n) ?線性掃描 O(n) ?插入/刪除需移位維護順序 O(n) ?直接操作尾部 O(1) ?內存開銷與無序數組相…

學習日記-day24-6.8

完成內容&#xff1a; 知識點&#xff1a; 1.網絡編程_TCP編程 ### 編寫客戶端1.創建Socket對象,指明服務端的ip以及端口號 2.調用socket中的getOutputStream,往服務端發送請求 3.調用socket中的getInputStream,讀取服務端響應回來的數據 4.關流public class Client {public…

JavaScript 核心對象深度解析:Math、Date 與 String

JavaScript 作為 Web 開發的核心語言&#xff0c;提供了豐富的內置對象來簡化編程工作。本文將深入探討三個重要的內置對象&#xff1a;Math、Date 和 String&#xff0c;通過詳細的代碼示例和綜合案例幫助你全面掌握它們的用法。 一、Math 對象 Math 對象提供了一系列靜態屬…

HarmonyOS開發:設備管理使用詳解

目錄 前言 設備管理概述 設備管理組成 1、電量信息 &#xff08;1&#xff09;導入模塊 &#xff08;2&#xff09;屬性信息 &#xff08;3&#xff09;常用屬性 &#xff08;4&#xff09;使用示例 2、設備信息 &#xff08;1&#xff09;導入模塊 &#xff08;2&a…

el-select下拉框 添加 el-checkbox 多選框

效果 vue <el-select v-model"value" multiple style"width: 100%" popper-class"select-popover-class" placeholder"請選擇試驗項目"><el-option v-for"item in options" :key"item.value" :value&qu…

Memory Repair (三)

Top-Level Verification and Pattern Generation 本節涵蓋 fuse box 編程、頂層 BISR&#xff08;內置自修復&#xff09;驗證以及生產測試 pattern 的生成 Fuse Box Programming 通過 BISR controller 對 fuse box 進行編程的兩種方法如下&#xff1a; ? 采用 Autonomous mod…

通過Wrangler CLI在worker中創建數據庫和表

官方使用文檔&#xff1a;Getting started Cloudflare D1 docs 創建數據庫 在命令行中執行完成之后&#xff0c;會在本地和遠程創建數據庫&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到數據庫&#xff1a; 現在&#xff0c;您的Cloudfla…

谷歌aab怎么轉 apk

一、環境搭建&#xff1a; 1、搭建 java 環境&#xff1b;2、安裝 AndroidStudio&#xff1b;3、下載 bundletool&#xff08;地址&#xff1a;Releases google/bundletool GitHub&#xff09;&#xff1b;4、確定本地有沒有簽名文件&#xff0c;mac電腦一般在/users/ 自己的…

04-初識css

一、css樣式引入 1.1.內部樣式 <div style"width: 100px;"></div>1.2.外部樣式 1.2.1.外部樣式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部樣式2 <!-- rel內表面引入的是style樣…

AWS EKS 集群日志上報觀測云實踐

AWS Lambda 介紹 AWS Lambda 是亞?遜提供的?種?服務器計算服務。它允許開發?員在?需管理服務器的情況下運?代碼。AWS Lambda 基于事件驅動的模型&#xff0c;當觸發指定的事件時&#xff0c;Lambda 會?動執?相應的代碼邏輯。 Amazon CloudWatch 日志 CloudWatch 日志…