您的位置:首页 > 编程语言 > Java开发

Java语言结合Freemaker技术导出Word文档

2013-02-20 11:09 531 查看
很多时候需要在项目中生成Word文档,Java语言结合Freemaker技术导出Word文档我觉得这种方式不错。

1.先看代码

主程序代码如下:

package com;

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

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

public class Word {

private Configuration configuration = null;

public Word() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}

public void createDoc() {

// 要填入模本的数据文件
Map dataMap = new HashMap();
getData(dataMap);

// 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
// ftl文件存放路径
configuration.setClassForTemplateLoading(this.getClass(), "/com/ftl");

Template t = null;
try {
// test.ftl为要装载的模板
t = configuration.getTemplate("QQ.ftl");
t.setEncoding("utf-8");
} catch (IOException e) {
e.printStackTrace();
}

// 输出文档路径及名称
File outFile = new File("F:/2013/test.doc");
Writer out = null;
try {
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
} catch (Exception e1) {
e1.printStackTrace();
}

try {
t.process(dataMap, out);
out.close();
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
*
* 注意dataMap里存放的数据Key值要与模板中的参数相对应
* @param dataMap
*/
private void getData(Map dataMap) {
dataMap.put("title", "Test");
dataMap.put("nian", "二零一二");
dataMap.put("danweiming", "陕西");
List lists = new ArrayList();

WordBean w1 = new WordBean();
w1.setPaixu("1");
w1.setBiaoduan("标段一");
WordBean w2 = new WordBean();
w2.setPaixu("2");
w2.setBiaoduan("标段二");

lists.add(w1);
lists.add(w2);

dataMap.put("wordBeans", lists);
dataMap.put("paiming", "1");
dataMap.put("biaoduan", "标段一");
}

public static void main(String[] args) {
new Word().createDoc();
}

}


JavaBean代码如下:

package com;

public class WordBean {

public String paixu;
public String biaoduan;

public String getPaixu() {
return paixu;
}

public void setPaixu(String paixu) {
this.paixu = paixu;
}

public String getBiaoduan() {
return biaoduan;
}

public void setBiaoduan(String biaoduan) {
this.biaoduan = biaoduan;
}
}

上述代码都很容易理解,最大的疑问就是QQ.ftl文件时怎么来的?

2.模板文件
(a):根据已经编辑好的word模板QQ.doc,选择另存为QQ.xml文件,新建freemaker类型文件QQ.ftl,将QQ.xml文件拷贝到QQ.ftl文件中。

(b):修改ftl模板文件,将需要替换的内容用${biaoduan}这样的标签替换。

(ftl文件太长,不列出来了)

3.运行程序,word文件将生成到制定位置。

个人认为这种生成方式相对于jacob要方便很多。

资源下载地址如下:

http://download.csdn.net/detail/xiaocha2008/5074285
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: