欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于web页面实现根据word模板导出word功能的实现。

程序员文章站 2024-01-14 20:58:52
...

1.废话不多说,直接上传模板
关于web页面实现根据word模板导出word功能的实现。
可以看到模板里面不仅包含文本框,表格,跨行,跨列,而且还有图片。
很头疼,没关系,在这里我给大家分享一下我的经验。

第一步:将word模板文件打开,将需要替换的文本框数据用字母代替。
表格里面需要跨行的数据 和 不需要跨行的数据 都需要用特殊标记
标记后的模板文件:
关于web页面实现根据word模板导出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);
}