freemarker生成word文档

Posted 沽名钓誉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了freemarker生成word文档相关的知识,希望对你有一定的参考价值。

利用freemarker生成word文档步骤:

导入jar包:freemarker-2.3.20.jar

新建word模板,调整好样式,

word模板另存为2003 xml格式,

xml中需要替换的内容用${param}替换,param为参数名称,例如:${name } ,传入参数map.put("name","张三");

编写java代码,替换xml文档,导出。

 

  1 /**
  2  *@文件名称: CreateWord.java
  3  *@日期: 2016-5-19
  4  *@Copyright: 
  5  */
  6 package com.billionsfinance.contractmanagement.archives.util;
  7 
  8 import java.io.File;
  9 import java.io.FileInputStream;
 10 import java.io.FileOutputStream;
 11 import java.io.IOException;
 12 import java.io.InputStream;
 13 import java.io.OutputStreamWriter;
 14 import java.io.Writer;
 15 import java.util.Map;
 16 
 17 import javax.servlet.ServletOutputStream;
 18 import javax.servlet.http.HttpServletRequest;
 19 import javax.servlet.http.HttpServletResponse;
 20 
 21 import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
 22 
 23 import freemarker.template.Configuration;
 24 import freemarker.template.Template;
 25 
 26 /**
 27  * TODO(生成word模板)    .
 28  *
 29  * @author xiaofei.xian
 30  * @version  v 1.0
 31  * @ClassName: CreateWord
 32  * @date: 2016年5月17日 下午3:18:10
 33  */
 34 public class CreateWord {
 35     
 36     /** The configuration. */
 37     private Configuration configuration = null;
 38     
 39     /**
 40      * Instantiates a new CreateWord.
 41      */
 42     public CreateWord() {
 43         configuration = new Configuration();
 44         configuration.setDefaultEncoding("utf-8");
 45     }
 46     
 47     /**
 48      * TODO(生成word模板并下载)    .
 49      *
 50      * @author xiaofei.xian
 51      * @param request the request
 52      * @param response the response
 53      * @param templateName 模板名称 WEB-INF\templates\下 例:contractCertifi.ftl
 54      * @param wordName 生成word文档名称
 55      * @param dataMap 数据绑定
 56      * @throws Exception void 返回值
 57      * @date: 2016年5月17日 下午3:18:34
 58      * @Title: CreateFile
 59      */
 60     public void CreateFile(HttpServletRequest request, HttpServletResponse response,
 61         String templateName, String wordName, Map<String, Object> dataMap)
 62         throws Exception {
 63         String name = "temp" + (int)(Math.random() * 100000) + ".doc";
 64         File f = new File(name);
 65         //设置FreeMarker的模版文件位置  
 66         configuration.setServletContextForTemplateLoading(request.getSession().getServletContext(),
 67             "WEB-INF/templates");
 68         Template t = null;
 69         //要装载的模板
 70         t = configuration.getTemplate(templateName);
 71         Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
 72         t.process(dataMap, w);
 73         InputStream fin = null;
 74         ServletOutputStream out = null;
 75         f.setReadOnly();
 76         f.setWritable(false);
 77         try {
 78             // 调用工具类WordGenerator的createDoc方法生成Word文档  
 79             fin = new FileInputStream(f);
 80             
 81             response.setCharacterEncoding("utf-8");
 82             response.setContentType("application/msword");
 83             // 设置浏览器以下载的方式处理该文件默认名为resume.doc  
 84             response.addHeader("Content-Disposition",
 85                 "attachment;filename=" + new String(wordName.getBytes("gb2312"), "ISO8859-1")
 86                     + ".doc");
 87             
 88             out = response.getOutputStream();
 89             byte[] buffer = new byte[512]; // 缓冲区  
 90             int bytesToRead = -1;
 91             // 通过循环将读入的Word文件的内容输出到浏览器中  
 92             while ((bytesToRead = fin.read(buffer)) != -1) {
 93                 out.write(buffer, 0, bytesToRead);
 94             }
 95         }
 96         finally {
 97             if (w != null) {
 98                 w.close();
 99             }
100             if (fin != null) {
101                 fin.close();
102             }
103             if (out != null) {
104                 out.close();
105             }
106             if (f != null) {
107                 f.delete(); // 删除临时文件  
108             }
109         }
110     }
111     
112     /**
113      * TODO(获取图片的BASE64编码)    .
114      *
115      * @author xiaofei.xian
116      * @param filename the filename
117      * @return String
118      * @throws IOException String 返回值
119      * @date: 2016年5月17日 下午4:12:19
120      * @Title: getImageString
121      */
122     public static String getImageString(String filename)
123         throws IOException {
124         InputStream in = null;
125         byte[] data = null;
126         try {
127             in = new FileInputStream(filename);
128             data = new byte[in.available()];
129             in.read(data);
130             in.close();
131         }
132         catch (IOException e) {
133             throw e;
134         }
135         finally {
136             if (in != null) {
137                 in.close();
138             }
139         }
140         return Base64.encode(data);
141     }
142 }

 

以上是关于freemarker生成word文档的主要内容,如果未能解决你的问题,请参考以下文章

使用FreeMarker生成Word文档

freeMarker生成word,excel文档

freemarker+Jfreechart生成Word文档(含图片)

freemarker在生成word文档时,对于文字中的空格和换行怎么完美处理处理.

java使用freemarker 生成word文档

使用freemarker模板引擎生成word文档的开发步骤