1.导入依赖
<!--poi-tl-->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.12.0</version>
</dependency>
2.代码
自己创建模板。放在(resource/file)
public ApiResult<String> download2(
HttpServletResponse response,
@RequestParam(value = "apiCode", required = true) String apiCode
) throws Exception {
String templatePath = getResourceFilePath("file","wordtempalte.docx");//resource下面有file文件夹,文件夹下面是模板
ApiPermitInfo data = getPermitInfo(apiCode);
writeword(templatePath, response,data);//写入文件
return null;
}
public static String getResourceFilePath(String folderPath, String fileName) {
// 构建资源路径
String resourcePath = folderPath + "/" + fileName;
// 获取资源的URL
URL resourceUrl = ResourceUtil.class.getClassLoader().getResource(resourcePath);
if (resourceUrl != null) {
// 对于JAR包中的资源,直接返回URL的路径部分
return resourceUrl.getPath();
} else {
// 资源不存在
return null;
}
}
private void writeword(String templatePath, HttpServletResponse response,ApiPermitInfo data) throws IOException {
//解析模板
XWPFTemplate template = XWPFTemplate.compile(templatePath);
//封装模型数据
HashMap<String, Object> map = new HashMap<>();
map.put("apiLabel","apiLabel");
map.put("apiPath", Texts.of("apiPath").color("0000FF").bold().create());
//apiParams getApiParams方法获取一个List类型
map.put("apiParams", Tables.create(getApiParams(data.getApiParams()).toArray(new RowRenderData[0])));
//渲染数据
template.render(map);
//以文件形式输出
// template.writeAndClose(new FileOutputStream(outputPath));//文件流
//下载
response.setContentType("application/octet-stream");
String formattedNow = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"));
response.setHeader("Content-disposition", "attachment;filename=\"" + formattedNow+".docx" + "\"");
OutputStream out = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(out);
template.write(bos);//浏览器下载
PoitlIOUtils.closeQuietlyMulti(template, bos, out);
return;
}
3.效果
参考:
poi-tl的使用(通俗易懂,全面,内含动态表格实现 !)-CSDN博客
https://deepoove.com/poi-tl/