1.maven配置
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.32</version> </dependency>
2.控制层业务代码
@GetMapping("/exportConstructionLogDocx") @ApiOperation(value = "Ai施工日志导出docx") public void exportConstructionLogDocx(HttpServletResponse response, @RequestParam(value = "date", required = false) String date) { String engId = "HeadUtil.getEngId()"; try { rtAigcService.exportConstructionLogDocx(response, engId, date); } catch (Exception e) { log.error("Ai施工日志导出docx-异常:", e); } }
3.业务层代码
private Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
@Override public void exportConstructionLogDocx(HttpServletResponse response, String engId, String date) { ClassPathResource resource = new ClassPathResource("/templates/constructionLog.ftl"); try { File templatesFile = resource.getFile(); configuration.setDirectoryForTemplateLoading(templatesFile.getParentFile()); Template template = configuration.getTemplate(templatesFile.getName()); Map<String, String> data = new HashMap<>(); data.put("content", "我是内容"); data.put("testHtml","<table class='MsoTableGrid' border='1'>" + " <tr style='height:14.7000pt;'>" + " <td width='128' valign='center'>'" + " 测试httml'" + " </td>'" + " <td width='128' valign='center'>'" + " <img src = '如果有图片这里放:图片的base64'/>" + " </td>'" + " </tr>'" + "</table>"); StringBuffer fileName = new StringBuffer(); fileName.append("施工日志-"); fileName.append(DateUtils.parseDateToStr(DateUtils.YYYYMMDDHHMMSS, new Date())); fileName.append(".docx"); String enc = "UTF-8"; response.setCharacterEncoding(enc); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName.toString(), enc)); try (Writer writer = response.getWriter()) { template.process(data, writer); } } catch (Exception e) { log.error("施工日志-导出失败-异常:", e); throw new RuntimeException("施工日志导出失败"); } }
4.模版constructionLog.ftl内容
<p class="MsoNormal" align="center" style="text-align:center;"> <span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri; mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt; mso-font-kerning:1.0000pt;"> <font face="宋体"> 施工日志-${content} </font> </span> <span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:Calibri; mso-hansi-font-family:Calibri;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt; mso-font-kerning:1.0000pt;"> <o:p></o:p> </span> </p> ${testHtml}