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 class文件格式之屬性詳解_動(dòng)力節(jié)點(diǎn)java學(xué)院整理
這篇文章主要介紹了Java class文件格式之屬性詳解,需要的朋友可以參考下2017-06-06
在Java8與Java7中HashMap源碼實(shí)現(xiàn)的對(duì)比
這篇文章主要介紹了在Java8與Java7中HashMap源碼實(shí)現(xiàn)的對(duì)比,內(nèi)容包括HashMap 的原理簡(jiǎn)單介紹、結(jié)合源碼在Java7中是如何解決hash沖突的以及優(yōu)缺點(diǎn),結(jié)合源碼以及在Java8中如何解決hash沖突,balance tree相關(guān)源碼介紹,需要的朋友可以參考借鑒。2017-01-01
SpringMVC日期類型參數(shù)傳遞實(shí)現(xiàn)步驟講解
這篇文章主要介紹了SpringMVC日期類型參數(shù)傳遞實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
Mybatis-Plus多種批量插入方案對(duì)比小結(jié)
在項(xiàng)目中優(yōu)化Mybatis-Plus批量插入性能是關(guān)鍵,通過(guò)比較不同方案,本文就來(lái)介紹一下Mybatis-Plus多種批量插入方案對(duì)比小結(jié),感興趣都的可以了解一下2024-10-10

