maven依赖
org.springframework.boot
spring-boot-starter-freemarker
org.jsoup
jsoup
1.8.3
word模板创建
创建word文档,将需要替换的内容用${XXX}替换。将文档另存为mht文件(mht文件支持html标签,而xml文件不支持),再另存为ftl文件。修改编码为UTF-8,去除{}内多余的标签代码 ![在这里插入图片描述](https://img-blog.csdnimg.cn/165ad021113f4e58a3d9587b690890de.jpeg#pic_center)
工具类
RichHtmlHandler WordHtmlGeneratorHelper WordImageConvertor RichContent
测试类
String templateName = "test.ftl";
Map data = new HashMap();
data.put("author", "一路生花");
data.put("createTime", "2022-08-01");
//创建富⽂本
StringBuilder sb = new StringBuilder();
sb.append("");
String cont = "1、降低风险。2、8月6日开业。3、合作布局。4、服务中心。5、综合性交易展厅。 ";
cont = cont + "![](\"C:\\Users\\yuwen\\Desktop\\pic\\2.jpg\") ";
sb.append(cont);
sb.append("");
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 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 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();
}
结果演示
![在这里插入图片描述](https://img-blog.csdnimg.cn/fa16a88e1ae84cd3ae8a43d23838ecc6.jpeg#pic_center)
|