文章目录
第一步、引入pom依赖
xml
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
第二步、新建导出工具类WordUtil
java
import cn.afterturn.easypoi.word.WordExportUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;
@Component
@Slf4j
public class WordUtil {
/**
* 导出word
* 模版变量中变量格式:{{a}}
*
* @param templatePath word模板地址
* @param fileName 文件名
* @param params 替换的参数
* @param response 响应头
*
*/
public static void exportWord(String templatePath, String fileName, Map<String, Object> params, HttpServletResponse response) {
Assert.notNull(templatePath, "模板路径不能为空");
Assert.notNull(fileName, "导出文件名不能为空");
Assert.isTrue(fileName.endsWith(".docx"), "word导出请使用docx格式");
try {
XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
//设置响应体内容类型
response.setContentType("application/octet-stream");
//添加响应头
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//暴露新添加的响应头
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//将word文档流输出到输出流中
doc.write(response.getOutputStream());
//关闭流
doc.close();
} catch (Exception e) {
log.error("exportWord方法出现问题", e);
e.printStackTrace();
}
}
}
第三步、创建模版word
在静态资源目录下resources/static/templates新建exportWord.docx,编写以下模版内容:
4.编写接口代码
java
@GetMapping("/exportWord")
public void exportWord(HttpServletResponse response) throws FileNotFoundException {
//存放数据,也就是填充在word里面的值
Map<String, Object> params = new HashMap<>();
params.put("ceshi","测试使用easypoi模版导出word");
params.put("name","张三");
params.put("text","知之为知之不知为不知");
//模板路径
// String templatePath = "E:\\demo\\word.docx";
// 或模板在静态资源的相对路径
File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));
File templateFile = new File(rootFile, "/static/templates/exportWord.docx");
//jar包获取不到文件路径
//URLDecoder.decode() 解决获取中文名称文件路径乱码
String templatePath = URLDecoder.decode(templateFile.getPath());
//生成文件名
String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis() + ".docx";
// 导出wold
try {
// 导出Word文档为文件
WordUtil.exportWord(templatePath, fileName, params,response);
// 将导出的Word文件转换为流
} catch (Exception e) {
System.out.println("导出Word文档时出现异常:" + e.getMessage());
}
}