利用freemarker模板引擎进行word导出

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

本来poi也是支持word导出,但是对于本人来讲,简单的还是行的通的

excel导出请查询:http://blog.csdn.net/qq_20617725/article/details/50813895

去网上下载,freemarker包,解压之后,将freemarker.jar导入项目:

完成jar导入之后,freemarker既然是模板引擎,那我们在进行word导出的时候肯定是需要一个模板的,打开我们的word2007,或wps,创建一个word文档,我可以随意编辑word文档,控制我们想要的文字样式以及整体格式,完成格式布局以后,我另存为以.xml的文件,在电脑显示文件类型。

将xml文件重名的方式改成以.ftl结尾文件,这就是我们使用freemarker模板引擎的模板,如:template.ftl



xuyongxuyong2016-03-02T05:14:00Z2016-03-02T05:16:11Z01000002052-10.1.0.5511
<#list datas as data>
${data.title}
<#list data.body as bd>
${bd.organ}    ${bd.date}      ${bd.authors}










${bd.summary}


 








我们在word使用${xxx},设置变量应用,freemarker标签类似于我们使用jstl表达式,可以遍历list集合,也可以获取单个变量的值,如果单个变量中还有不能样式,这个时候就变得有点,因为这个时候你可能要学点freemarker标签,其实你不想学也是可以的,就用最简单的办法,就是打开word设置不能样式,保存为xml格式之后,直接编辑(建议使用editplus)格式稍微好看一点,方便你找到对的样式代码。

将改好的模板放入你的项目中,下面完成Java部分代码编写:

private static Configuration configuration = null;  
    private static Map allTemplates = null;  
    
    /**
     * 静态加载所有模板
     */
    static {  
        configuration = new Configuration();  
        configuration.setDefaultEncoding("utf-8");  //设置配置编码
        try {
configuration.setDirectoryForTemplateLoading(new File("template/template.ftl"));//加载模板文件
} catch (IOException e) {
e.printStackTrace();
}
    }  
  
    /**
     * 抛出模板加载异常
     */
    private WordExport() {  
        throw new AssertionError();  
    }  

 public static File createDoc(Map dataMaps, String file_name) {  
        String name = file_name+".doc";  
        File file = new File(name);  
        allTemplates = new HashMap();   // Java 7 钻石语法  
        try { 
        allTemplates.put("template", configuration.getTemplate(template_name));  

        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        Template t = allTemplates.get("template");  
        try {  
            // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开  
            Writer w = new OutputStreamWriter(new FileOutputStream(file), "utf-8");  
            t.process(dataMaps, w);  //word 数据补全
            w.close();  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        return file;  
    }  

这个就已经得到你想要的word,怎么处理该文件就交给大家吧!


你可能感兴趣的:(freemarker,xml,模板引擎,freemarker,word,文档)