使用freemarker-2.3.20通過xml模板生成work文件

1、官網下載freemarker-2.3.20.jar包,用freemarker-2.3.20.tar.gz裏面的freemarker.jar就可以了;

https://freemarker.apache.org/

2、如何生成xml模板,其實很簡單,就先創建一個word文檔,然後另存爲的時候選擇存爲.xml文件就可以了,這個xml就是一個模板文件了;值得注意的是,裏面的變量使用${}的格式,如下圖:

.doc文件另存爲選擇的文件類型,生成的xml文件就是模板了。

3、編寫代碼:

package test01;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

public class CreateDoc {
	private Configuration configure = null;
    public CreateDoc(){
           configure= new Configuration();
           configure.setDefaultEncoding("utf-8");
    }
    /**
     * · 根據Doc模板生成word文件
     * @param dataMap Map 需要填入模板的數據
     * @param tempPath 模板文件的路徑,例如:/com/temp/
     * @param tempFileName 模板文件的名稱,例如:tmplate01.xml
     * @param savePath 保存路徑,例如:/home/admin/outWord.doc
     */
    public void createDoc(Map<String, String> dataMap,String tempPath, String tempFileName, String savePath){
           try{
                  //加載需要裝填的模板
                  Template template  = null;
                  //加載模板文件
                  configure.setClassForTemplateLoading(this.getClass(),tempPath);
                  //設置對象包裝器
                  configure.setObjectWrapper(new DefaultObjectWrapper());
                  //設置異常處理器
                  configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
                  //定義Template對象,注意模板類型名字與downloadType要一致
                  template= configure.getTemplate(tempFileName);
                  //輸出文檔
                  File outFile = new File(savePath);
                  Writer out = null;
                  out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));                                    
                  template.process(dataMap,out);
                  outFile.delete();
           }catch (Exception e) {
                  e.printStackTrace();
           }
    }
    
    public static void main(String[] args) {
    	CreateDoc cd = new CreateDoc();
    	Map mapV = new HashMap<String, String>();
    	mapV.put("name", "張三");
    	mapV.put("tableName", "信息反饋表");
    	mapV.put("account", "787756885885858");
    	mapV.put("amout", "1000.09");
    	mapV.put("seq_no", "ICP888873838473878384");
    	
    	SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");
        Date date = new Date();
        String formatDate = sdf.format(date);
    	
    	String wordPath = "D:\\xmlFile\\"+formatDate+".doc";
    	cd.createDoc(mapV, "/com/temp/","testXml.xml", wordPath);
    	
	}
}

注意:configure.setClassForTemplateLoading(this.getClass(),tempPath);這個模板路徑用電腦的磁盤路徑會報拿不到文件的錯,要把模板文件放在項目的某個路徑下才行。

新手上路,以上就差不多了,其他自己發揮吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章