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}