模板引擎freemarker的简单使用教程,


      freemarker十分强大,而且不依赖web容器,个人感觉十分好用。下面直接进主题,freemarker还有什么特性,请找度娘或谷哥,下面实现通过freemarker生成word的例子。

1、创建模板

我创建模板的方法比较简单,首先是新建一个word文档,按照内容格式排好版,然后在需要注入信息的位置先写上占位置的数据,如图1,然后另存为xml文件(我是存为2003版本的xml),然后用文本编辑器把xml打开,在xml中把对应的数据改为freemarker的输出表达式,如图2,然后保存,把xml的后缀名改为freemarker的文件后缀名ftl,便是一个freemarker模板了。如下图 图1:word文档: 2:通过word改写的freemarker模板:  

2、代码实现

[java] view plaincopy
  1. import java.io.BufferedWriter;  
  2. import java.io.File;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.OutputStreamWriter;  
  7. import java.io.UnsupportedEncodingException;  
  8. import java.io.Writer;  
  9. import java.text.SimpleDateFormat;  
  10. import java.util.Date;  
  11. import java.util.HashMap;  
  12. import java.util.Map;  
  13.   
  14. import freemarker.template.Configuration;  
  15. import freemarker.template.Template;  
  16. import freemarker.template.TemplateException;  
  17.   
  18. /** 
  19.  * 使用freemark生成word 
  20.  * 
  21.  */  
  22. public class Freemark {  
  23.       
  24.     public static void main(String[] args){  
  25.         Freemark freemark = new Freemark("template/");  
  26.         freemark.setTemplateName("wordTemplate.ftl");  
  27.         freemark.setFileName("doc_"+new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(new Date())+".doc");  
  28.         freemark.setFilePath("bin\\doc\\");  
  29.         //生成word  
  30.         freemark.createWord();  
  31.     }  
  32.       
  33.     private void createWord(){  
  34.           
  35.         Template t = null;  
  36.         try {  
  37.             //获取模板信息  
  38.             t = configuration.getTemplate(templateName);  
  39.         } catch (IOException e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.         File outFile = new File(filePath+fileName);  
  44.         Writer out = null;  
  45.         try {  
  46.             out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));  
  47.         } catch (UnsupportedEncodingException e) {  
  48.             e.printStackTrace();  
  49.         } catch (FileNotFoundException e) {  
  50.             e.printStackTrace();  
  51.         }  
  52.           
  53.         Map map = new HashMap<String, Object>();  
  54.         map.put("name""蒙奇·D·路飞");  
  55.         map.put("country""日本");  
  56.         map.put("city""东京");  
  57.         map.put("time",new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(new Date()));  
  58.         try {  
  59.             //输出数据到模板中,生成文件。  
  60.             t.process(map, out);  
  61.             out.close();  
  62.         } catch (TemplateException e) {  
  63.             e.printStackTrace();  
  64.         } catch (IOException e) {  
  65.             e.printStackTrace();  
  66.         }  
  67.           
  68.     }  
  69.     /** 
  70.      * freemark初始化 
  71.      * @param templatePath 模板文件位置 
  72.      */  
  73.     public Freemark(String templatePath) {  
  74.         configuration = new Configuration();  
  75.         configuration.setDefaultEncoding("utf-8");  
  76.         configuration.setClassForTemplateLoading(this.getClass(),templatePath);       
  77.     }     
  78.     /** 
  79.      * freemark模板配置 
  80.      */  
  81.     private Configuration configuration;  
  82.     /** 
  83.      * freemark模板的名字 
  84.      */  
  85.     private String templateName;  
  86.     /** 
  87.      * 生成文件名 
  88.      */  
  89.     private String fileName;  
  90.     /** 
  91.      * 生成文件路径 
  92.      */  
  93.     private String filePath;  
  94.   
  95.     public String getFileName() {  
  96.         return fileName;  
  97.     }  
  98.   
  99.     public void setFileName(String fileName) {  
  100.         this.fileName = fileName;  
  101.     }  
  102.   
  103.     public String getFilePath() {  
  104.         return filePath;  
  105.     }  
  106.   
  107.     public void setFilePath(String filePath) {  
  108.         this.filePath = filePath;  
  109.     }  
  110.   
  111.     public String getTemplateName() {  
  112.         return templateName;  
  113.     }  
  114.   
  115.     public void setTemplateName(String templateName) {  
  116.         this.templateName = templateName;  
  117.     }  
  118.       
  119. }  
      程序运行后,会在bin的doc目录下生成doc文件,效果图:

相关内容

    暂无相关文章