用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}}
生成的结果如图: