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);這個模板路徑用電腦的磁盤路徑會報拿不到文件的錯,要把模板文件放在項目的某個路徑下才行。
新手上路,以上就差不多了,其他自己發揮吧。