> 技术文档 > Java在word中指定位置插入图片。_java poi word 添加图片

Java在word中指定位置插入图片。_java poi 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}} <!-- 批准人签名位置 -->

Java在word中指定位置插入图片。_java poi word 添加图片

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.效果展示

Java在word中指定位置插入图片。_java poi word 添加图片