今天这篇文章是根据word模板去生成新的word(在原模板当中写内容)。
展示效果如下图,左边为模板,右边是生成后的新word。
模板当中我使用了很多的占位符。
实现方式是用到了poi-tl模板引擎。
这里附上poi-tl文档 http://deepoove.com/poi-tl/#hack-loop-table
依赖
<!--poi-tl生成word-->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.8.2</version>
</dependency>
代码如下:
public CommonResp generateWordBase1(HttpServletResponse response)
{
try
{
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("name", "ikun");
dataMap.put("sex", "男");
dataMap.put("age", 23);
dataMap.put("time1", "2023-06-01");
dataMap.put("time2", "2025-12-31");
dataMap.put("address", "ikun集美们");
dataMap.put("zuiming", "唱跳rap");
dataMap.put("jiguan", "办案机关");
dataMap.put("time3", "2025-12-31");
dataMap.put("anqing", "案情大全");
dataMap.put("qk", "特别情况");
dataMap.put("yj", new PictureRenderData(200,200, ".jpg",
BytePictureUtils.getUrlByteArray("https://images.cnblogs.com/cnblogs_com/qq1445496485/1909145/o_201230130836%E5%9B%9B%E5%A8%83.jpg")));
dataMap.put("bz", new PictureRenderData(100,100, "D:\\123.jpg"));
// 原文档地址
String mobanPath = "D:\\doc\\审查报告.docx";
//文件输出地址,指定到文件
String outPath = "D:\\doc\\一个新的word文档.docx";
//.文件地址的目录 是否存在,不存在新建目录
File dest = new File(outPath);
// 检测是否存在目录
if (!dest.getParentFile().exists())
{
dest.getParentFile().mkdirs();// 新建文件夹
}
XWPFTemplate render = XWPFTemplate.compile(mobanPath).render(dataMap);
//这个路径指定的是
render.writeToFile(outPath);
}
catch (ZdyException e)
{
log.error(e.getMessage(), e);
throw e;
}
catch (Exception e)
{
log.error(e.getMessage(), e);
throw new ZdyException(ExceptionCode.EXCEPTION_CODE, e);
}
return CommonResp.success();
}
有木有感觉 gan gan dan dan