用poi-tl生成word文档还是很方便的,代码如下
Map<String, List<Map<String, Object>>> datasMap = new HashMap<>(); List<Map<String, Object>> list1 = new ArrayList<>(); XWPFTemplate template = null; FileOutputStream out = null; String picDirRoot = appConfig.getPicDirRoot(); try { for (Analysis analysis : list) { String tags = analysis.getTag(); String imgPath1 = analysis.getImgPath(); String imgName = analysis.getImgName(); String selected = analysis.getSelected(); String imgPath = picDirRoot + imgPath1 + File.separator + imgName; if (StringUtils.isBlank(tags)) { copyPictures(resultTagsSet, selectedTagsSet, imgName, selected, imgPath, "default",subRecordId); } else { String[] split = tags.split(";"); // 图片按标签分类保存 for (String tag : split) { copyPictures(resultTagsSet, selectedTagsSet, imgName, selected, imgPath, tag,subRecordId); } } if ("true".equals(selected)) { // 生成word文档 Map<String, Object> datas = new HashMap<>(); BufferedImage bufferedImage = ImageIO.read(new File(imgPath)); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); int newheight = height * 500 / width; datas.put("tag", analysis.getTag()); datas.put("picture", new PictureRenderData(500, newheight, imgPath)); list1.add(datas); } } datasMap.put("item", list1); String reportDir = appConfig.getReportDir(); XWPFTemplate compile = XWPFTemplate.compile(reportDir + AppConstants.MODULE_NAME); template = compile.render(datasMap); String uuid = StrUtils.uuid(); out = new FileOutputStream(reportDir + uuid + ".docx"); template.write(out); out.flush(); out.close(); template.close(); // 下载报告 File file = new File(reportDir + uuid + ".docx"); downloadFile(file, response, request); file.delete(); } catch (Exception e) { logger.error(e.getMessage(), e); result.setCode("1"); result.setMessage("报告生成失败"); }finally { if (out != null) { try { out.close(); } catch (Exception e) { e.printStackTrace(); } } if (template != null) { try { template.close(); } catch (Exception e) { e.printStackTrace(); } } }
这里生成的word文档是图文交替的,这里使用到poi-tl的区块对,详细内容请查看文档,template.docx内容如下:
{{?item}}
{{tag}}
{{@picture}}
{{/item}}
生成的结果如图: