如何用FreeMark来操作Word

一、freemarker生成word

1.创建模板。

我创建模板的方法比较简单,也不知道有没有其他更好的方法,有的话,请告诉我吧~

首先是新建一个word文档,按照内容格式排好版,然后在需要注入信息的位置先写上占位置的数据,如图1,然后另存为xml文件(我是存为2003版本的xml),

然后用文本编辑器把xml打开,在xml中把对应的数据改为freemarker的输出表达式,如图2,然后保存,把xml的后缀名改为freemarker的文件后缀名ftl,便是一个freemarker模板了。

这个是word中写的数据

Name: ${name}
Password:${password}

现在转成xml,再换成ftl

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-

现在我们来操作它

package com.lianrui.commons.tools;

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.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class Freemark {  
    
	
	/** 
     * freemark模板配置 
     */  
    private static Configuration configuration;  
    
    public static void main(String[] args){  
    	
    	
        Freemark freemark = new Freemark("/conf");  
        //生成word  
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("name", "heinrich");
        map.put("password", "heinrich");
        freemark.createWord("F:/logo/","logo.doc","name.ftl",map);  
    }  
    /**
     *  
     * @param filePath:保存的文件路径
     * @param fileDocName:保存后的文件名称
     * @param templateName:freemark模版的名字
     * @param map:需要传递的数据
     */
    public void createWord(String filePath,String fileDocName,String templateName,Map<String,Object> map){  
          
        Template t = null;  
        try {  
            //获取模板信息  
            t = configuration.getTemplate(templateName);  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
          
        File outFile = new File(filePath+fileDocName);  
        Writer out = null;  
        try {  
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));  
        } catch (UnsupportedEncodingException e) {  
            e.printStackTrace();  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        }  
          
        try {  
            //输出数据到模板中,生成文件。  
            t.process(map, out);  
            out.close();  
        } catch (TemplateException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
          
    }  
    /** 
     * freemark初始化 
     * @param templatePath 模板文件位置 
     */  
    @SuppressWarnings("deprecation")
	public Freemark(String templatePath) {  
        configuration = new Configuration();  
        configuration.setDefaultEncoding("utf-8");  
        configuration.setClassForTemplateLoading(this.getClass(),templatePath);       
    }       
}

生成了一个word文档


Name: heinrich

Password:heinrich

是不是很方便

你可能感兴趣的:(如何用FreeMark来操作Word)