1.导入依赖
<!--poi-tl-->
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.0</version>
</dependency>
2.代码
自己创建模板。放在(resource/file)
@GetMapping("/api/word")@ApiOperation(value = "接口文档下载", produces = "application/octet-stream")@ApiOperationSupport(order = 1)public void download(@RequestParam @NotBlank(message = "id不能为空") String id, HttpServletResponse response) throws Exception {try (InputStream resourceAsStream = getClass().getResourceAsStream("/file/word.docx");XWPFTemplate template = XWPFTemplate.compile(resourceAsStream);OutputStream out = response.getOutputStream();BufferedOutputStream bos = new BufferedOutputStream(out)) {//封装模型数据HashMap<String, Object> map = new HashMap<>();map.put("apiLabel", "apiLabel");map.put("apiPath", Texts.of("apiPath").color("0000FF").bold().create());map.put("returnFormat", "JSON");//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");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode防止中文乱码String fileName = URLEncoder.encode("测试"+LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss"))+"_授权文档", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx");template.write(bos);}}
3.效果
参考:
poi-tl的使用(通俗易懂,全面,内含动态表格实现 !)-CSDN博客
https://deepoove.com/poi-tl/