EasyPoi 是一个基于 Apache POI 的开源 Java 工具库,旨在简化 Excel 和 Word 文档的操作。本文将详细介绍如何使用 EasyPoi 快速导出 Word 文档。
一、准备工作
1、引入依赖
在 Maven 项目中,添加以下依赖:
xml
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easy-poi-base</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easy-poi-annotation</artifactId>
<version>4.4.0</version>
</dependency>
二、准备好一个word模版文件
-
在项目的
resources
目录下创建一个template/exportTemplate.docx
文件作为模板。 -
使用 EasyPoi 提供的占位符 {{}} 来定义动态内容的位置。例如:
css
{{title}}
{{content}}
三、编写导出方法的工具类
java
package com.example.simple.util;
import cn.afterturn.easypoi.cache.manager.POICacheManager;
import cn.afterturn.easypoi.word.WordExportUtil;
import cn.afterturn.easypoi.word.entity.MyXWPFDocument;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.Map;
@Slf4j
public class ExportWordUtil {
/**
* 通用Word文档导出方法
* @param templateName 模板文件名
* @param params 模板参数
* @param response HTTP响应对象
* @param outputFileName 输出文件名
* @throws RuntimeException 导出过程中的异常
*/
public static void exportWordDocument(String templateName, Map<String, Object> params,
HttpServletResponse response, String outputFileName) {
MyXWPFDocument doc = null;
try {
// 获取模板文档
doc = getXWPFDocument(templateName);
if (doc == null) {
throw new RuntimeException("未能找到模板文件");
}
// 使用模板引擎替换内容
WordExportUtil.exportWord07(doc, params);
// 设置响应头
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName);
// 输出文档
try (ServletOutputStream outputStream = response.getOutputStream()) {
doc.write(outputStream);
outputStream.flush();
}
} catch (Exception e) {
log.error("导出Word文档失败", e);
throw new RuntimeException("导出Word文档失败: " + e.getMessage());
} finally {
// 关闭文档
if (doc != null) {
try {
doc.close();
} catch (Exception e) {
log.error("关闭文档失败", e);
}
}
}
}
public static MyXWPFDocument getXWPFDocument(String templateName) throws IOException {
// 从classpath获取模板
InputStream is = null;
try {
is = POICacheManager.getFile(templateName);
if (is == null) {
throw new FileNotFoundException("模板文件不存在: " + templateName);
}
return new MyXWPFDocument(is);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
log.error("关闭输入流失败", e);
}
}
}
}
}
四、在ExportWordServiceImpl层调用导出word工具方法
注意:在spring-boot3中使用时response引入的是import jakarta.servlet.http.HttpServletResponse;
java
@Override
public void exportWord(Map<String, Object> map, HttpServletResponse response) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("title", "我是一个好标题");
params.put("content", "我是一个很有深度的内容");
ExportWordUtil.exportWordDocument("template/exportTemplate.docx", params, response, "export.docx");
}
五、前端请求接口后word文档的展示效果

六、总结
通过 EasyPoi,我们可以轻松实现 Word 文档的导出功能。希望本文能帮助你快速上手并完成相关开发任务!
如果你有任何问题或建议,欢迎留言交流!