最近做OA系统要求导出部门信息的doc文档信息,于是自己用了最简便的方法完成这点。
package com.rocky.oa.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import com.rocky.oa.entity.DepartInfo;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
public class CreatWordUtil {
@SuppressWarnings()
//String dir(ftl模板文件的位置),String toDir(导出doc放置的位置)
public static void creatWordDepartInfo(String dir,String toDir,DepartInfo departInfo) {
try {
//创建配置实例
Configuration cfg = new Configuration();
cfg.setDefaultEncoding("utf-8");
cfg.setDirectoryForTemplateLoading(new File(dir)); //模板所在的文件夹
cfg.setObjectWrapper(new DefaultObjectWrapper());
//获取模板
/**
* 生成模板
* 1、officeWord另存为生成一个xml文件
* 2、把xml改为ftl
* 3,把xml编码格式改为GBK
* 4,使用${str}代替字符串
* 如果生成的word格式为ANSI,则将ftl模板第一行声明编码改为gbk
* */
Template temp = cfg.getTemplate(departinfo.ftl,UTF-8);
temp.setEncoding("utf-8");
//创建数据模型
Map root = new HashMap();
root.put(departname", departInfo.getDepartName());
root.put(branchname",departInfo.getBranchInfo().getBranchName() );
root.put(departInfo.getUserInfo().getUserName());
root.put(departInfo.getConnectTelNo().toString());
root.put(departInfo.getConnectMobileTelNo().toString());
root.put(departInfo.getFaxes().toString());
//将模板和数据模型合并生成文件
File docFile = new File(toDir);
Writer docout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(docFile)));
temp.process(root, docout);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String report() {
DepartInfo departInfo = departService.get(id);
String path = ServletActionContext.getServletContext().getRealPath(
"/resource");
File file = new File("c://部门信息");
if (!file.exists()) {
file.mkdirs();
}
String newPath = "c://部门信息/" + departInfo.getDepartName() + ".doc";
CreatWordUtil.creatWordDepartInfo(path, newPath, departInfo);
return "relist";
}