使用FreeMarker导出word文档
来源:互联网 发布:怎么看数据库地址 编辑:程序博客网 时间:2024/06/16 01:08
在Java web项目中使用FreeMarker导出word文档
在最近的项目中,有需求需要导出word文档。经过一番研究,笔者发现导出word文档的方法的确是有很多种,比如使用Jacob、Apache POI、Java2Word、iText等等,但是都没有使用freemarker来的简单直接预方便。因此,下面笔者演示一下利用freemarker生成简单word文档的例子。当然,复杂的word文档的生成也是同样的原理与方法。
FreeMarker
首先,我们看一段FreeMarker官方的介绍:Apache FreeMarker是一个模板引擎:基于模板和更改数据生成文本输出(HTML网页,电子邮件,配置文件,源代码等)的Java库。 模板是使用FreeMarker模板语言(FTL)编写的,这是一种简单的专业语言(不是像PHP这样的全面的编程语言)。 您的意图是准备数据以真正的编程语言显示,例如问题数据库查询和进行业务计算,然后模板显示已准备好的数据。 在模板中,您将重点关注如何呈现数据,而在模板外,您将关注要显示的数据。
也就是说,使用FreeMarker模板,我们可以生成各种文本,包括word文档。
下面我们就使用FreeMarker生成word文档。
- 制作ftl模板
因为freemarker是基于模板,所以,首先我们需要制作ftl即freemarker模板。
制作步骤:如下图所示:
(1).新建word模板
假如,我们就要生成这样的一个word文档,注意${}中,即是我们将要填充的动态数据。
(2).将上面的word文档另存为xml格式
使用编辑工具打开查看,比如使用notepad++打开:
如上图显示。
(3).修改此xml文件的格式为ftl,即生成我们最终的模板
至此,模板制作完成。 - 新建Dynamic web project项目WordDemo
- 引入freemarker的jar,下载地址
http://freemarker.org/freemarkerdownload.html - 将上面的ftl模板引入项目,同时建立如下的目录结构:
- 编写MDoc类:
package cn.com.mp.utils;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.io.Writer;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class MDoc { private Configuration configuration = null; public MDoc() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } /** * * @param dataMap 要填充的数据集合 * @param fileName 生成的word文档路劲与名称 * @throws UnsupportedEncodingException */ public void createDoc(Map<String,Object> dataMap,String fileName) throws UnsupportedEncodingException { //读取模板 configuration.setClassForTemplateLoading(this.getClass(), "/cn/com/mp/utils"); Template t=null; try { t = configuration.getTemplate("template.ftl"); } catch (IOException e) { e.printStackTrace(); } File outFile = new File(fileName); Writer out = null; FileOutputStream fos=null; try { fos = new FileOutputStream(outFile); //注意对流的编码 OutputStreamWriter oWriter = new OutputStreamWriter(fos,"UTF-8"); out = new BufferedWriter(oWriter); } catch (FileNotFoundException e1) { e1.printStackTrace(); } try { t.process(dataMap, out); out.close(); fos.close(); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
6 . 编写测试类
package test;import java.io.UnsupportedEncodingException;import java.util.HashMap;import java.util.Map;import cn.com.mp.utils.MDoc;public class Main { public static void main(String[] args) { Map<String, Object> dataMap = new HashMap<String, Object>(); dataMap.put("title", "如何使用freemarker生成word文档"); dataMap.put("context", "首先建立ftl模板,引入freemarker的jar包,编写MDoc类读取模板,编写Main测试类,使用map集合填充模板"); dataMap.put("author", "mp"); dataMap.put("date", "2017-05-18"); MDoc mdoc = new MDoc(); try { mdoc.createDoc(dataMap, "E:/outFile.doc"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } }}
7 . 测试结果:
在e盘,确实存在outFile文件,打开查看:
生成我们预期的word文档。
8 . 总结
至此,我们使用freemarker完成了word文档的导出。如果你使用过其他的技术导出过word文档,那么此刻,使用freemarker的好处就不言而喻,很直接很方便。
更多FreeMarker的知识,查看Freemarker官网
编写的过程难免会出现各种错误,欢迎大家指教。
- 使用freemarker导出word文档
- 使用FreeMarker导出word文档
- Java使用freemarker导出word文档
- 使用FreeMarker导出固定格式word文档
- java中使用freemarker导出word文档
- freemarker导出word文档
- freemarker导出word文档
- 使用freemarker导出word文档,支持图文导出
- 使用freemarker 导出word
- 使用FreeMarker导出Word
- 使用freemarker导出Word
- 使用freemarker导出Word
- 使用 freemarker 导出 word
- 使用freemarker导出word
- 使用freemarker导出word文档包含多张图片
- freemarker利用word模版导出word文档
- 【freemarker】使用模板导出word
- 使用FreeMarker自定义导出word
- ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码
- oracle 触发器的整理
- 解决页面退出 WebView 继续播放视频音乐的问题
- css3基础02web字体及字体图标
- leofs 对象存储介绍(一)
- 使用FreeMarker导出word文档
- UNION和UNION ALL的区别
- Android Studio安装Kotlin插件及使用
- 加密处理判断
- Python--知识转载
- 整除
- mybatis 多表查询字段有重复解决方案
- 编写日历
- HTTP协议