千家信息网

freemarker中怎么导出word

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇文章给大家分享的是有关freemarker中怎么导出word,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.新建word文档,导出
千家信息网最后更新 2025年02月03日freemarker中怎么导出word

本篇文章给大家分享的是有关freemarker中怎么导出word,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1.新建word文档,导出预期如下

2.另存为xml文件

3.编辑xml,将文字替换成表达式 ${argname}

原图:

替换后 :

年龄、职位、项目、简述对应的值依次替换成 ${age} ${position} ${project} ${note}

4.修改文件名称为:ftl2doc.ftl,放到项目里

5.查看pom依赖是否添加若没有需添加freemarker依赖
                                      org.springframework.boot                        spring-boot-starter-freemarker                
6.编写工具类
package org.jeecg.modules.system.util;import java.io.File;import java.io.IOException;import java.io.PrintWriter;import java.net.URLEncoder;import java.util.Locale;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import freemarker.template.*;public class FreemarkerUtil {    private static final Object LOCK = new Object();    private static Configuration cfg;    private static FreemarkerUtil ftl ;    private FreemarkerUtil(File file) throws IOException {        cfg = new Configuration();        cfg.setDirectoryForTemplateLoading(file);        cfg.setEncoding(Locale.getDefault(), "UTF-8");        cfg.setObjectWrapper(new DefaultObjectWrapper());    }    private static void check(File file) {        if (ftl == null) {            synchronized (LOCK) {                try {                    ftl = new FreemarkerUtil(file);                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }    /**     * 创建 word 文档     * 必须先设置response导出配置,然后解析模版,否则会出问题     * @throws IOException     */    public static void createFile(File templateDir,String templateName,String docFileName, Map rootMap,HttpServletRequest request, HttpServletResponse response) throws IOException {        //    response.resetBuffer();        //设置导出        response.addHeader("Cache-Control","no-cache");        response.setCharacterEncoding("UTF-8");        response.setContentType("application/vnd.ms-word;charset=UTF-8");        String ua = request.getHeader("user-agent");        ua = ua == null ? null : ua.toLowerCase();        if(ua != null && (ua.indexOf("firefox") > 0 || ua.indexOf("safari")>0)){            try {                docFileName = new String(docFileName.getBytes(),"ISO8859-1");                response.addHeader("Content-Disposition","attachment;filename=" + docFileName);            } catch (Exception e) {            }        }else{            try {                docFileName = URLEncoder.encode(docFileName, "utf-8");                response.addHeader("Content-Disposition","attachment;filename=" + docFileName);            } catch (Exception e) {            }        }        check(templateDir);        //解析模版        Template temp = cfg.getTemplate(templateName, "UTF-8");        PrintWriter write = response.getWriter();        try {            temp.process(rootMap, write);        } catch (TemplateException e) {            e.printStackTrace();        }finally {            if(write != null){                write.flush();                write.close();            }        }    }}

7.测试接口

    @Resource    private ResourceLoader resourceLoader;    @GetMapping(value = "/wordTest")    public void wordTest(HttpServletRequest req,HttpServletResponse resp){        String path = "templates/word";        org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:"+path);        try {            File file = resource.getFile();            Map map = new HashMap();            //这里map的key和上面模板内的${key}保持一致即可            map.put("name", "刘禹锡");            map.put("age", 26);            map.put("position", "php开发");            map.put("project", "不动产登记项目");            map.put("note", "php是世界上最好的语言!!!");            String docFileName ="word-模板导出测试.doc";            String templateName = "ftl2doc.ftl";            FreemarkerUtil.createFile(file,templateName,docFileName, map, req, resp);        } catch (IOException e) {            e.printStackTrace();        }    }

测试结果导出文件如下:

以上就是freemarker中怎么导出word,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

0