java 导出word 并下载

记录一下导出操作

源码:

    /************
     * 导出word 并下载
     * @param id   房号记录编号
     * ***********************/
    @RequestMapping("/exportAgent")
    @ResponseBody
    public void execute(String id, HttpServletRequest request,HttpServletResponse resp) throws Exception {
        log.info("导出word 并下载==>>[id="+id+"]");
        String path = request.getSession().getServletContext().getRealPath("/ExportWord");
        String filename = exportSimpleWord(id, request);// 生成文件的文件名称 这个需要动态的获取
        OutputStream out;// 输出响应正文的输出流
        InputStream in;// 读取本地文件的输入流
        // 获得本地输入流
        File file = new File(path + "\\" + filename);
        in = new FileInputStream(file);
        // 设置响应正文的MIME类型
        resp.setContentType("Content-Disposition;charset=GB2312");
        resp.setHeader("Content-Disposition", "attachment;" + " filename="    + new String(filename.getBytes(), "ISO-8859-1"));
        // 把本地文件发送给客户端
        out = resp.getOutputStream();
        int byteRead = 0;
        byte[] buffer = new byte[512];
        while ((byteRead = in.read(buffer)) != -1) {
            out.write(buffer, 0, byteRead);
        }
        in.close();
        out.close();
        file.delete();
    }

操作类:

/***
     * 执行导出Word 文档 
     * @param id   记录编号
     * ****/
    public String exportSimpleWord(String id, HttpServletRequest request)    throws IOException, TemplateException {
        log.info("执行导出Word 文档==>>[id="+id+"]");
        HouseAgent houseAgent = houseAgentService.houseAgent(id);
        this.insertCommunityName2CommunityArea(houseAgent);
        List<Integer> roleIds=new ArrayList<Integer> ();
        List<String> communityIds=new ArrayList<String> ();
        roleIds.add(8);
        communityIds.add(houseAgent.getCommunityId());
        //房屋租售管理员
        CommunityDesResult CommunityDesResult = communityRpcService.getCommunityDesByCommunityId(houseAgent.getCommunityId());
        CommunityDes communityDes = CommunityDesResult.getCommunityDes();
        if (null != communityDes) {
            houseAgent.setUserPhone(communityDes.getCommunityServicePhone());
        }
        
        // 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("hosue_title", StringUtils.isNotBlank(houseAgent.getTitle())?houseAgent.getTitle():"");// 标题
        dataMap.put("neirong", StringUtils.isNotBlank(houseAgent.getContent())?houseAgent.getContent():"");// 描述
        dataMap.put("renovation",  StringUtils.isNotBlank(houseAgent.getRenovation())?houseAgent.getRenovation():"");// 装修
        dataMap.put("type", null!=houseAgent.getHouseType()?houseAgent.getHouseType():"");// 类型
        dataMap.put("price", houseAgent.getMoney()+houseAgent.getMoneyUnit());// 售价
        dataMap.put("house_size", null!=houseAgent.getHouseSize()?houseAgent.getHouseSize().toString()+"平米":"");// 面积
        dataMap.put("layout_type", null!=houseAgent.getLayoutType()?houseAgent.getLayoutType():"");// 户型
        dataMap.put("floors", StringUtils.isNotBlank(houseAgent.getFloors())?houseAgent.getFloors():"");// 楼层
        dataMap.put("Rights", null!=houseAgent.getYearLimit()?(houseAgent.getYearLimit()+"年"):"");// 产权
        dataMap.put("address", StringUtils.isNotBlank(houseAgent.getAddr())?houseAgent.getAddr():"");// 地址
        dataMap.put("xiaoqu", StringUtils.isNotBlank(houseAgent.getCommunityName())?houseAgent.getCommunityName():"");// 小区
        dataMap.put("area", StringUtils.isNotBlank(houseAgent.getCommunityErea())?houseAgent.getCommunityErea():"");// 区域
        dataMap.put("money", (null!=houseAgent.getMoney()?houseAgent.getMoney()+(StringUtils.isNotBlank(houseAgent.getMoneyUnit())?houseAgent.getMoneyUnit():""):""));// 区域
        dataMap.put("rentType", StringUtils.isNotBlank(houseAgent.getRentType())?houseAgent.getRentType():"");
        dataMap.put("year", null!=houseAgent.getYear()?houseAgent.getYear()+"年":"");
        dataMap.put("telephone",StringUtils.isEmpty(houseAgent.getUserPhone())?"":houseAgent.getUserPhone());
        List<Map<String,Object>> imglist = null;
        try {
            imglist = getImg(houseAgent.getHouseImgs(), request);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // Configuration用于读取ftl文件
        Configuration configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");

        /* 以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是 */
        // 获取当前类所在路径目录
        String pathString = request.getSession().getServletContext().getRealPath("/ExportWord");
        configuration.setDirectoryForTemplateLoading(new File(pathString));

        String nameString = "house" + System.currentTimeMillis() + ".doc";
        // 输出文档路径及名称
        File outFile = new File(pathString + "\\" + nameString + "");

        // 以utf-8的编码读取ftl文件
        Template t;
        String templateFile="";
        //出租
        if(houseAgent.getType().intValue()==0){
            templateFile="rent.ftl";
            //出售
        }else if(houseAgent.getType().intValue()==1){
            templateFile="sell.ftl";
        }
        t = configuration.getTemplate(templateFile, "utf-8");
            dataMap.put("images", imglist); // 图片

        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
        t.process(dataMap, out);
        out.close();
        
        
        
        //删除已下载的图片
        final List<Map<String,Object>> finalList=imglist;
        ThreadPools.getInstance().execute(new Runnable() {
            @Override
            public void run() {
                for (Map<String, Object> map : finalList) {
                    File file=new File(map.get("deleteImage").toString());
                    file.delete();
                }
            }
        });
        
        
        return nameString;
    }

 

posted @ 2016-12-14 16:53  ice.ko  阅读(6002)  评论(1编辑  收藏  举报