Java實(shí)現(xiàn)在word中指定位置插入圖片
Poi-tl 簡(jiǎn)介
Poi-tl 是基于 Apache POI 的 Java 開源文檔處理庫(kù),專注于高效操作 Word 文檔(.docx 格式)。它通過(guò)模板引擎機(jī)制簡(jiǎn)化復(fù)雜文檔生成流程,相比原生 POI 具備更簡(jiǎn)潔的 API、更強(qiáng)的靈活性和更優(yōu)的性能表現(xiàn),廣泛應(yīng)用于報(bào)表生成、合同模板填充、文檔批量處理等企業(yè)級(jí)場(chǎng)景。
Maven 依賴配置
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.0</version>
</dependency>
Poi-tl 實(shí)現(xiàn)原理與步驟
1. 模板標(biāo)簽規(guī)范
在 Word 模板中需使用特定格式的占位符標(biāo)識(shí)圖片插入位置,標(biāo)準(zhǔn)格式為:{{@標(biāo)簽名稱}}。
示例標(biāo)簽格式:
{{@Head}} <!-- 審核人簽名位置 -->
{{@Approver}} <!-- 批準(zhǔn)人簽名位置 -->

2.完整實(shí)現(xiàn)代碼
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文檔圖片插入工具類
* 功能:通過(guò)Poi-tl在Word模板指定位置插入圖片
*/
public class WordImageInserter {
/**
* 主方法:執(zhí)行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"); // 批準(zhǔn)人簽名圖片
try {
// 綁定模板占位符與圖片渲染對(duì)象
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("Head", createPicture(inspectorImagePath, 100, 50)); // 替換{{@Head}}標(biāo)簽
dataModel.put("Approver", createPicture(approverImagePath, 100, 50)); // 替換{{@Approver}}標(biāo)簽
// 執(zhí)行文檔渲染與圖片插入
try (InputStream templateStream = Files.newInputStream(templatePath);
OutputStream tempOutputStream = Files.newOutputStream(tempOutputPath)) {
// 編譯模板并渲染數(shù)據(jù)
XWPFTemplate template = XWPFTemplate.compile(templateStream).render(dataModel);
// 輸出到臨時(shí)文件(避免直接修改原文件導(dǎo)致?lián)p壞)
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();
}
}
/**
* 構(gòu)建圖片渲染對(duì)象(支持尺寸自定義)
* @param imagePath 圖片文件路徑
* @param width 圖片寬度(像素)
* @param height 圖片高度(像素)
* @return 圖片渲染對(duì)象(可直接用于模板渲染)
* @throws IOException 圖片讀取失敗時(shí)拋出
*/
private static Object createPicture(Path imagePath, int width, int height) throws IOException {
// 使用NIO流加載圖片,自動(dòng)識(shí)別圖片類型(此處顯式指定為PNG)
return Pictures.ofStream(Files.newInputStream(imagePath), PictureType.PNG)
.size(width, height) // 自定義圖片尺寸
.create(); // 生成圖片渲染實(shí)體
}
}
3.效果展示

到此這篇關(guān)于Java實(shí)現(xiàn)在word中指定位置插入圖片的文章就介紹到這了,更多相關(guān)Java word插入圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用kafka發(fā)送和生產(chǎn)消息的示例
本篇文章主要介紹了Java使用kafka發(fā)送和生產(chǎn)消息的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
SpringBoot使用easy-captcha 實(shí)現(xiàn)驗(yàn)證碼登錄功能(解決思路)
文章介紹了如何使用Spring Boot和Easy-Captcha實(shí)現(xiàn)驗(yàn)證碼登錄功能,后端通過(guò)Easy-Captcha生成驗(yàn)證碼并存儲(chǔ)在Redis中,前端獲取驗(yàn)證碼并顯示給用戶,登錄時(shí),前端將用戶輸入的驗(yàn)證碼和標(biāo)識(shí)符發(fā)送到后端進(jìn)行驗(yàn)證,感興趣的朋友跟隨小編一起看看吧2025-02-02
SWT(JFace) 體驗(yàn)之FontRegistry
測(cè)試代碼如下:2009-06-06
Java中成員方法與成員變量訪問(wèn)權(quán)限詳解
在Java學(xué)習(xí)過(guò)程中,在寫類經(jīng)常為用到public,private和protected,我個(gè)人的經(jīng)驗(yàn)是一般類的成員變量都是用private,方法用public,類的內(nèi)部用protected方法,如果是存在子類的,那我就會(huì)把父類中的成員變量變?yōu)閜rotected。(其余的看具體實(shí)際情 況而定)2015-08-08
Springmvc nginx實(shí)現(xiàn)動(dòng)靜分離過(guò)程詳解
這篇文章主要介紹了Springmvc nginx實(shí)現(xiàn)動(dòng)靜分離過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
macbook中springboot的jmeter壓測(cè)示例
這篇文章主要介紹了macbook中springboot的jmeter壓測(cè)示例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11

