maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
word模板创建
创建word文档,将需要替换的内容用${XXX}替换。将文档另存为mht文件(mht文件支持html标签,而xml文件不支持),再另存为ftl文件。修改编码为UTF-8,去除{}内多余的标签代码
工具类
RichHtmlHandler
WordHtmlGeneratorHelper
WordImageConvertor
RichContent
测试类
String templateName = "test.ftl";
Map<String, Object> data = new HashMap<>();
data.put("author", "一路生花");
data.put("createTime", "2022-08-01");
//创建富⽂本
StringBuilder sb = new StringBuilder();
sb.append("<div>");
String cont = "<p>1、降低风险。2、8月6日开业。3、合作布局。4、服务中心。5、<span style=\"color: rgb(230, 0, 0);\">综合性交易展厅</span>。</p>";
cont = cont + "<p><img src=\"C:\\Users\\yuwen\\Desktop\\pic\\2.jpg\"></p>";
sb.append(cont);
sb.append("</div>");
RichContent richContent = new RichContent();
richContent.setHtml(sb.toString());
//----------------------------------------
//从mht⽂件中找,上面图片红框已勾出
richContent.setDocSrcLocationPrex("file:///C:/268BA2D4");
richContent.setDocSrcParent("test.files");
richContent.setNextPartId("01D8A815.D95DC390");
//从mht⽂件中找,上面图片红框已勾出
richContent.setShapeidPrex("_x56fe__x7247__x0020");
richContent.setTypeid("#_x0000_t75");
richContent.setSpidPrex("_x0000_i");
//-----------------------------------------
RichHtmlHandler richHtmlHandler = WordHtmlGeneratorHelper.createRichHtmlHandler(richContent, false);
List<RichHtmlHandler> richHtmlHandlerList = new ArrayList<>();
richHtmlHandlerList.add(richHtmlHandler);
data.put("imagesXmlHrefString", WordHtmlGeneratorHelper.getXmlImgHref(richHtmlHandlerList));
data.put("imagesBase64String", WordHtmlGeneratorHelper.getImagesBase64String(richHtmlHandlerList));
data.put("content", richHtmlHandler.getHandledDocBodyBlock());
response.addHeader("Content-Disposition", "attachment;filename=test.doc");
this.downWord(response, data, templateName);
private void downWord(HttpServletResponse response, Map<String, Object> data, String templateName) throws Exception {
// 设置FreeMarker的版本和编码格式
Configuration configuration = new Configuration(new Version("2.3.28"));
configuration.setDefaultEncoding("UTF-8");
// 设置FreeMarker生成Word文档所需要的模板的路径
// 此处把模版文件都放在 resources 下的 templates 中
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
// 设置FreeMarker生成Word文档所需要的模板
Template template = configuration.getTemplate(templateName, "UTF-8");
template.process(data, out);
out.flush();
out.close();
}