关于web页面实现根据word模板导出word功能的实现。
1.废话不多说,直接上传模板
可以看到模板里面不仅包含文本框,表格,跨行,跨列,而且还有图片。
很头疼,没关系,在这里我给大家分享一下我的经验。
第一步:将word模板文件打开,将需要替换的文本框数据用字母代替。
表格里面需要跨行的数据 和 不需要跨行的数据 都需要用特殊标记
标记后的模板文件:
图片比较复杂一点,构造模板的时候,需要点击word工具上方插入图片。
然后另存为word2003版本的xml文件,改名字为template.ftl文件。
打开ftl文件,将上述特殊字符用freemarker ${pjOwerUnit!}代替。
列表<#list validList as item> 需要用到循环。
后台处理: 构造数据
`Map<String, Object> dataMap = new HashMap<String, Object>();
FasSuperviseBuildInfoExt data = buildInfoService.findDataByContactListId(maryKey);
//项目名称
dataMap.put(“projectName”, data.getProjectName());
//业主单位
dataMap.put(“pjOwerUnit”, data.getPjOwerUnit());
//施工单位
dataMap.put(“baseMakerName”, data.getBaseMakerName());
//监理单位
dataMap.put(“superviseManCompany”, data.getSuperviseManCompany());
//机型
dataMap.put(“model”, data.getModel());
//台数
dataMap.put(“windNum”, data.getWindNum());
//基础类型
dataMap.put(“baseType”, data.getBaseType());
//编号
dataMap.put(“fanCode”, data.getFanCode());
//基础质量评价
dataMap.put(“basicQualityAssessment”, data.getBasicQualityAssessment());
//基础质量工程师
SecUser secUser = (SecUser) getLoginUser();
dataMap.put(“createUserName”, secUser.getUserName());
SimpleDateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd”);
String dateString = formatter.format(data.getCreateTime());
//日期
dataMap.put(“createTime”, dateString);
//列表数据封装
List exts = new ArrayList();
FasSuperviseBuildValidListExt vxt = new FasSuperviseBuildValidListExt();
vxt.setSuperviseBuildInfoId(maryKey);
SuperviseBuildValidListServiceDto dto = new SuperviseBuildValidListServiceDto(vxt, buildPagenation());
exts = buildValidListService.getAllModelVw(dto);
exts.forEach((vvv) -> {
//获取文档文本图片
String imgKey = vvv.getImg() ; //文件ID
if(FasStringUtils.isEmpty(imgKey) || FasStringUtils.equals(“null”, imgKey)) {
vvv.setImg(null);
}else{
FileInfo fileInfo = fileService.getFileInFoById(imgKey);
String filePath = fileInfo.getFilePath();
InputStream in;
byte [] temp = null ;
//TODO 测试服务器图片
try {
in = fileService.getFileStream(filePath);
temp = new byte[in.available()];
in.read(temp);
in.close();
BASE64Encoder encoder = new BASE64Encoder();
String img = encoder.encode(temp);
vvv.setImg(img);
} catch (Exception e) {
e.printStackTrace();
}
}
String result = vvv.getCalibrateResult(); //检验结论
if(result.equals("-1")){
vvv.setCalibrateResult(null);
}
});
dataMap.put("validList", exts);`
Controller 部分:
try {
TempleWordUtil.createWord(beanParams,“template.ftl”,“检验标准工单”,response);
} catch (Exception e) {
logger.error(“导出word异常!异常原因:”+ e);
}
上一篇: 质因数分解