关于使用FreeMarker如何做到在浏览器弹框选择地址?

因为在做项目的时候要涉及到导出Word,所有网上找了些资料,大部门的人都是使用FreeMarker制作模板,在导出Word。

但是在导出的时候遇到个问题,因为导出的路径我都是在JAVA代码中写好的,但是这样肯定是不行的,然后在网上找了一些资料,看到也是比较多人遇到这个问题的,但是都没有什么解决的结果。得到的结果大多是叫我换另一种方式导出。这样的话跟逃避有什么区别。所有我就结合导出Excel的方式,通过如下代码可以解决这个问题。

/**
     * 导出Word的操作方法
     *
     * @param objects 元模型ID,支持批量上传
     * @throws Exception
     */
    public void createWord(List<Object> objects, HttpServletRequest request, HttpServletResponse response) throws Exception {

        //获取ftl文件的路径
        String patha = ExprotWord.class.getResource("/").toString();
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(0, patha.lastIndexOf("/"));
        patha = patha.substring(patha.indexOf("/") + 1, patha.lastIndexOf("/"));
        //最终得到的路径
        String sourcePath = patha + "/src/main/template";


        configuration.setDirectoryForTemplateLoading(new File(sourcePath)); // FTL文件所存在的位置
        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
        Template t = null;
        try {
            t = configuration.getTemplate("exprotWord.ftl"); // 文件名
        } catch (IOException e) {
            e.printStackTrace();
        }

        SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/msword");

        String resultUrl = "对象类型清单_" + sf.format(new Date()) + ".doc";
        //防止文件名含有中文乱码
        resultUrl = new String(resultUrl.getBytes("gb2312"), "ISO8859-1");
        response.setHeader("Content-Disposition", "attachment;filename=" + resultUrl);
        response.getWriter();
        //存放的目标路径
//        File outFile = new File(resultUrl);


        Map<String, Object> dataMap = new HashMap<String, Object>();


        getData(dataMap, objects);

        Writer out = null;
        try {
//            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
            out = response.getWriter();
            // 必须加 "utf-8" 不然在 UserInfoRestController 通过webservice的方式调用 生成的文件 打开
            // 不了,会报错(而当做java程序去运行,则没有"utf-8"生成的文件也能正常打开的),原因不详
            // 规范编写应该是要加上文件的编码的"utf-8"
        } catch (Exception e1) {
            e1.printStackTrace();
        }

        try {
            t.process(dataMap, out);
            out.close();
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
String resultUrl = "对象类型清单_" + sf.format(new Date()) + ".doc";这段代码是点击导出的时候弹窗展示的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值