java freemaker 导出word文档 高逼格教程

1 篇文章 0 订阅
1 篇文章 0 订阅

这里写图片描述

本教程教大家如何用freemaker导出这么一份带表格,并且表头还要自动重复的word文档。
废话不多说 开造!
第一步:我的环境是spring+springMVC+mybatis 我知道没啥关系,但是不写的话我憋得慌。

@Override
    public void exportWord( 
            HttpServletResponse response,HttpServletRequest request) throws IOException {

        Configuration configuration=new Configuration();  
        configuration.setDefaultEncoding("utf-8");   
        Map dataMap=new HashMap();
        List  table2=new ArrayList();   
        for(int i=0;i<91;i++ ){
            Table2 t2=new Table2();   //table2 这个类只是演示用的  你要根据自己的业务具体的写属性
            t2.setSeq(String.valueOf(i));
            t2.setDetail("测试开发计划"+i);   
            t2.setPerson("张三"+i);   
            t2.setBegindate("2010-10-1");   
            t2.setFinishdate("2010-10-31");   
            t2.setRemark("备注信息");   
            t2.setS1(String.valueOf(i));
            t2.setS2(String.valueOf(i));
            t2.setS3(String.valueOf(i));
            t2.setS4(String.valueOf(i));
            t2.setS5(String.valueOf(i));
            t2.setS6(String.valueOf(i));
            t2.setS7(String.valueOf(i));
            t2.setS8(String.valueOf(i));
            t2.setS9(String.valueOf(i));
            table2.add(t2);   
        }   
        dataMap.put("table2", table2);
        //设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,   
        //这里我们的模板是放在com.havenliu.document.template包下面   
        configuration.setClassForTemplateLoading(this.getClass(), "/com/wafa/webservices/");  //这个路径自己随便建一个就行了 
        Template t=null;   
        Writer out = null;  
        File outFile = null;
        try {   
            t = configuration.getTemplate("qwbwin.ftl");   
        String name = "temp" + (int) (Math.random() * 100000) + ".doc";
        outFile = new File(name);   
        out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));   
        t.process(dataMap, out); 
        } catch (Exception e) {   
            e.printStackTrace();   
        } finally{ //finally下面的代码很重要 否则的话你导不出word 必须flush close 一下才行
            if(out!=null){
                try {
                    out.flush();
                    out.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        }  
        //下面这些代码是为了你的 导出做准备的
        request.setCharacterEncoding("UTF-8");
        File file = null;
        InputStream fin = null;
        ServletOutputStream out1 = null;
        try {
            fin = new FileInputStream(outFile);
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/msword");
            // 设置浏览器以下载的方式处理该文件默认名为Exhibition.doc
            response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("1212" + ".doc", "UTF-8"));
            out1 = response.getOutputStream();
            byte[] buffer = new byte[1024]; // 缓冲区
            int bytesToRead = -1;
            // 通过循环将读入的Word文件的内容输出到浏览器中
            while ((bytesToRead = fin.read(buffer)) != -1) {
                out1.write(buffer, 0, bytesToRead);
            }
        } finally {
            if (fin != null)
                fin.close();
            if (out1 != null)
                out1.close();
             if (outFile != null)
                 outFile.delete();  // 删除临时文件
        }
    }

这一段代码 我是写在 ****ServiceImpl中的 通过点击浏览器中的 “导出word”这个按钮来调用的,然后在浏览器中下载下来的,所以必须要加上finally中的内容那样才能下载出来。
table2里的属性 要根据自己的业务逻辑自己写 ,我这里随便写了几个
这里写图片描述
第二部: 配置word模板 “qwbwin.ftl”
首先选中要做表头的两行,单击右键-表格属性-行- 在各页顶端以标题形式重复出现, 这样的就能做到设置一次表头 ,各个页面都能出现了 。 word中的“111” 这是占位符 一会有用
这里写图片描述
这里写图片描述
这里写图片描述

把做好的word 模板保存成xml
这里写图片描述
把有“111”的地方替换成“ ${user.seq}” 这是freemaker的语法,当然其他的属性你要自己去替换成对应javabeen中你需要的属性 这里写图片描述大体上就是这么个语法

这里写图片描述
然后另存为 “.ftl”后缀名的文件
复制到 包里就可以了
这里写图片描述
然后就可以在浏览器中调用了
๑乛◡乛๑ 不懂的加我qq 吻我吧 这里写图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值