1、下载freemarker的jar包导入到项目中;
2、通过word文档生成doc模板(xml模板):
新建word文档,编辑内容(变量使用${propertyName}的方式),然后另存为xml文件,xml模板便完成。
另存为xml模板。
如果要使用遍历list的话,需要使用到标签:
<#list listName as entityName>
存放遍历的内容,遍历的变量值是:${entityName.name}
</#list>
标签存放的位置是如下位置,标签套住<w:p>这个行标签即可,如果你另存的xml没有像我下面的那样排版,你可以使用notepad++的Xml tools插件功能进行自动美化:
需要特别注意的是,上面的entityName一定要是实体对象,不能是map对象
listName则是传入的map中存入的list的key值。(详情看下面实现代码)。
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.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
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);
File test = new File("D:\\xmlFile\\test.doc");
Writer outtest = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(test),"utf-8"));
System.out.println("文件是否可以写"+outFile.canWrite());
Writer out = null;
out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
template.process(dataMap,out);
System.out.println(template.getImports()+",,,"+template.getDateFormat());
test.delete();
outFile.delete();
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
CreateDoc cd = new CreateDoc();
Map mapV = new HashMap<String, Object>();
mapV.put("name", "张三");
mapV.put("tableName", "信息反馈表");
mapV.put("account", "787756885885858");
mapV.put("amout", "1000.09");
mapV.put("seq_no", "ICP888873838473878384");
List list = new ArrayList<Map>();
Person p1 = new Person();
p1.setId(1);
p1.setName("大黄");
Person p2 = new Person();
p2.setId(2);
p2.setName("大老黑");
list.add(p1);
list.add(p2);
mapV.put("listName", list);
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/","testXmlMap.xml", wordPath);
}
}
以上有不明白的可以留言。我看到了的话会回复。