Java poi 模板导出Word 带图片
重点!!!
官方文档:https://deepoove.com/poi-tl/#_maven
最终效果
模板
其实内容都在官方文档里写的非常明白了 我这里只是抛砖引玉。
Maven依赖
<poi.version>4.1.2</poi.version><poi.tl.version>1.10.0</poi.tl.version>
<!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><!--poi Word--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>${poi.tl.version}</version></dependency>
代码
@GetMapping("/word/export/{id}")public void word(@PathVariable("id") Long id,HttpServletResponse response){//这里自己查询需要导出的内容GenPersonWordInfoVO wordInfo = genPersonBaseService.getWordInfo(id);//将JavaBean转为map HashMap<String, Object> map = new HashMap<>();Field[] fields = wordInfo.getClass().getDeclaredFields();for (Field field : fields) {field.setAccessible(true);try {map.put(field.getName(), field.get(wordInfo));} catch (IllegalAccessException e) {e.printStackTrace();}}//这里放入图片map.put("headImg", Pictures.ofUrl(wordInfo.getHeadImg()).size(100, 150).center().create());//这里声明这些字段是列表 需要使用LoopRowTableRenderPolicy 类来处理 看名字也可以发现是循环table的行LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();Configure config = Configure.builder().bind("healthHistory", policy).bind("checkHistory", policy).bind("touchHistory", policy).bind("diagnosisHistory", policy).bind("treatmentHistory", policy).build();//加载模板文件 从resources目录下加载ClassPathResource resource = new ClassPathResource("template/person_file_template.docx");XWPFTemplate template = null;try {template = XWPFTemplate.compile(resource.getInputStream(),config).render(map);ServletOutputStream out = response.getOutputStream();response.setContentType("application/force-download");response.addHeader("Content-Disposition", "attachment;fileName=" + System.currentTimeMillis()+".docx");template.write(out);out.flush();out.close();template.close();} catch (IOException e) {e.printStackTrace();}}
最后,官方文档非常详细,完全可以参考官方文档。