第一步:手动创建一个doc模板;
第二步:将world中需要动态生成的部分用${}替换
第三步:将world另存为xml文件
第四步:将xml文件复制在eclipse(或者其他代码编辑器)中,然后鼠标右击文件->properties,设置编码格式为utf-8(防止转换后的world乱码),最后修改文件的类型为ftl(即文件的后缀名为.ftl)
第五步:
目录结构:
代码:
package world;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
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 DocumentHandler {
private Configuration configuration = null;
public DocumentHandler() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
public void createDoc() {
//要填入模本的数据文件
ShenQingShu data=new ShenQingShu();
getData(data);
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库教程装载,
configuration.setClassForTemplateLoading(this.getClass(),"shengqingshu");
Template t=null;
try {
//test.ftl为要装载的模板
t = configuration.getTemplate("3.ftl");
} catch (IOException e) {
e.printStackTrace();
}
//输出文档路径及名称
File outFile = new File("C:\\Users\\Administrator\\Desktop\\world\\out.doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
t.process(data, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 注意:
* 如果是Map那么存放的数据Key值要与模板中的参数相对应
* 如果是java Bean那么属性名要和模板中的参数相对应
* @param dataMap
*/
private void getData(ShenQingShu data){
data.setName("lw");
data.setTel("111111111");
data.setPapers_type("身份证");
data.setPapers_number("422325199704193518");
data.setBrand_type("奥迪A6");
data.setDealer("中国开运");
data.setEndine_number("dfad565891221");
data.setTotal_prices("45万");
data.setDown_payment_for("0.8");
data.setVin("123456789");
data.setFirst_payment_ratio("40万");
}
public static void main(String[] args){
DocumentHandler dh=new DocumentHandler();
dh.createDoc();
}
}
需要的jar:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
OK,运行代码,打开world文档,就可以看到效果了!
注意:
若出现如下错误
Was expecting one of:
<STRING_LITERAL> ...
<RAW_STRING> ...
"false" ...
"true" ...
<INTEGER> ...
<DECIMAL> ...
"." ...
"+" ...
"-" ...
"!" ...
"[" ...
"(" ...
"{" ...
<ID> ...
原因,world在转换为xml的时候,${}格式会出现问题,导致解析异常
解决办法(第二步):
打开xml文件,将字段用${}包括起来,就OK!