freemarker+poi导出word文档

package cn.it58.util;

import freemarker.template.Configuration;
import freemarker.template.Template;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;

/**
 * @author geQiang
 * @version 1.0
 * @date 2019/6/12
 * @description cn.it58.util
 */
public class WordUtils {
    public void getUserWord(HttpServletRequest request, HttpServletResponse response, Map<String, Object> map) {
        //1、创建配置文件对象
        Configuration configuration = new Configuration();
        //2、设置字符集
        configuration.setDefaultEncoding("UTF-8");
        //3、指定模板所在的文件夹
        configuration.setServletContextForTemplateLoading(request.getSession().getServletContext(), "/template");
        //4、获得模板对象
        Template t = null;
        try {
            t = configuration.getTemplate("resume.xml", "utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //5、创建临时word文件
        String fileName = (String) map.get("userName") + ".doc";
        File file = new File(fileName);
        //6、替换模板中的标记${id},${userName}...
        Writer writer = null;
        try {
            //Writer:字符流接口,父类
            //BufferedWriter:字符缓冲流,构造时需要Writer类型对象入参
            //OutputStreamWriter:以字节读取文件转化成字符文件时,同时进行设置字符集,
            //构造时需要OutputStream对象入参
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
            t.process(map, writer);
            writer.flush();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        //7、读取word文档到缓冲区
        InputStream inputStream = null;
        OutputStream outputStream = null;
        byte[] buffer = new byte[0];
        try {
            inputStream = new BufferedInputStream(new FileInputStream(file));
            int len = inputStream.available();
            buffer = new byte[len];
            inputStream.read(buffer);
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //8、重置response对象
        response.reset();
        //9、设置响应内容的类型
        response.setContentType("application/octet-stream");
        //10、设置响应头提示下载指定文件
        try {
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        //11、设置响应头提示文件长度
        response.setHeader("Content-Length", "" + file.length());
        //12、打开输出流,转接到响应流
        try {
            outputStream = new BufferedOutputStream(response.getOutputStream());
            //13、输出缓冲区的word文档
            outputStream.write(buffer);
            outputStream.flush();
            //14、关闭流
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

导出的word

个人详情

 

基本情况

用户姓名

root123

性    别

 

出生日期

2015-02-04 00:00:00

角    色

系统管理员

创 建 者

L8HQ4ygmFLf

创建日期

1976-05-21 05:01:07

修 改 者

王洋洋

修改日期

2005-06-04 03:25:08

移动电话

17619657706

图片地址

/upload/ed8aac27-5user.png

用户编号

43

用户编码

root123

 

用户地址

合肥

用户密码

FF9830C42660C1DD1942844F8069B74A

 

自我评价

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值