XWPFTemplate(一)生成根据模板文件填充内容生成word文件

7 篇文章 0 订阅

1、查询数据放入Map


    @Override
    public Map<String, Object> generateReport(String id,String areaCode) {
        //查询主数据
        ProCheckSpecialDO p = proCheckSpecialMapper.generateReport(id,areaCode);
        Map<String, Object> map = new HashMap<>();
        map.put("deptName", p.getEleName());
        map.put("columnName", p.getLabel());
        map.put("errorTotal", p.getErrorTotal());
        map.put("title", p.getTitle());
        QueryWrapper qw = new QueryWrapper();
        qw.eq("bind_id",p.getId());
        qw.orderByAsc("create_time");
        //查询所有的关于当前遍历数据错误项
        try {
            List<Map<String, Object>> contentsList = new ArrayList<>();
            List<ProCheckSpecialErrorDO> errorDOS = specialErrorMapper.selectList(qw);
            for(ProCheckSpecialErrorDO error : errorDOS){
                Map<String,Object> content = new HashMap<>();
                content.put("contentText","问题描述:"+error.getContent());
                ArrayList<LinkedHashMap> arrayList=new ArrayList();
                QueryWrapper imgQw = new QueryWrapper();
                imgQw.eq("parent_id",error.getId());
                imgQw.eq("bind_id",p.getId());
                List<ProCheckSpecialErrorImageDO> images = imageMapper.selectList(imgQw);
                for (ProCheckSpecialErrorImageDO i : images) {
                    LinkedHashMap m = new LinkedHashMap();
                    m.put("image", Pictures.ofStream(new FileInputStream(i.getFilePath()), PictureType.PNG)
                            .size(600, 330).create());
                    arrayList.add(m);
                }
                content.put("images",arrayList);
                contentsList.add(content);
            }
            map.put("contents",contentsList);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return map;
    }

2、使用XWPFTemplate将数据填充的模板文件,并且向HttpServletResponse中写入


    @GetMapping("/generateReport")
    @ApiOperation("生成报告")
    public void generateReport(String id, String code, HttpServletResponse response) {
        OutputStream out = null;
        try {
            Map<String, Object> map = proCheckSpecialService.generateReport(id,code);
            String deptName = (String) map.get("deptName");
            out = response.getOutputStream();
            XWPFTemplate template = XWPFTemplate.compile(templatePath).render(map);
            template.write(out);
            response.setContentType("application/octet-stream");
            response.setHeader("Content-disposition","attachment;filename="+deptName+"报告.docx");
            response.addHeader("Access-Control-Expose-Headers", "Content-disposition");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(out != null){
                try {
                    out.flush();
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

3、模板文件

  • {{参数名称}} - 单个属性字段

  • {{?参数名称}}{{=#this}}{{/参数名称}} - 判断是否存在,如果存在则显示(可判断任意类型如集合以及单个属性)

  • {{?集合名称}}{{@参数名称}}{{/集合名称}} - 判断是否存在,如果存在则显示图片

    模板文件:
    在这里插入图片描述

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值