• 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;
        }
  • 相关阅读:
    binary and out mode to open a file
    ADV7482&TP2825开发之总结
    C++ 操作符重载
    OpenCV学习(一)基础篇
    Linux设备驱动程序 第三版 读书笔记(一)
    My First Linux Module
    Bitmap每个像素值由指定的掩码决定
    C++ File Binary
    Bitmap RGB24 4字节对齐
    查看binlog的简单方法!
  • 原文地址:https://www.cnblogs.com/miskis/p/6179993.html
Copyright © 2020-2023  润新知