首先使用freemarker要使用的jar包 freemarker.jar
1.制作word模板
2:将模板另存为其他格式选择
3:将生成的xml文件修改文件类型为ftl,也就是修改文件后缀名即可
4:上代码
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import sun.misc.BASE64Encoder;
public class DocUtil {
private Configuration configuration = null;
public DocUtil() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
public void createDoc(Map<String, String> dataMap,String path) {
// 要填入模本的数据文件
// Map dataMap = new HashMap();
// getData(dataMap);
// 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,
// 这里我们的模板是放在com.havenliu.document.template包下面
configuration.setClassForTemplateLoading(this.getClass(),"/com/wed/business/report/action");
Template t = null;
try {
// test.ftl为要装载的模板
t = configuration.getTemplate("template.ftl");
t.setEncoding("utf-8");
} catch (IOException e) {
e.printStackTrace();
}
// 输出文档路径及名称
File outFile = new File("D:/upload/"+path+"/"+path+".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();
}
}
public static String getImageString(String filename) throws IOException {
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(filename);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
throw e;
} finally {
if(in != null) in.close();
}
BASE64Encoder encoder = new BASE64Encoder();
return data != null ? encoder.encode(data) : "";
}
/**
*
* 注意dataMap里存放的数据Key值要与模板中的参数相对应
*
*
*
* @param dataMap
*
*/
// private void getData(Map dataMap) {
// dataMap.put("case", "冀A123");
// }
public static void main(String[] args) {
// DocUtil documentHandler = new DocumentHandler();
// documentHandler.createDoc();
}
}
这是操作word的工具类
public void creatReport() throws IOException{
CaseInfo caseInfo = (CaseInfo) HibernateDAO.findById(CaseInfo.class, id);
DocUtil docUtil = new DocUtil();
Map<String, String> dataMap = new HashMap<String,String>();
dataMap.put("case", caseInfo.getCaseNumber());
dataMap.put("bdh", caseInfo.getPolicyNumber());
dataMap.put("bbxr", caseInfo.getInsured());
dataMap.put("cph", caseInfo.getPlateNumber());
dataMap.put("cpxh", caseInfo.getPlateModels());
dataMap.put("cxsj", caseInfo.getBeInDangerTime().toString());
dataMap.put("cxdd", caseInfo.getBeInDangerAddress());
dataMap.put("spje", "100万");
dataMap.put("dcjl", "调查结论");
dataMap.put("dyrq", "2017-07-17");
dataMap.put("wtf", caseInfo.getEntrustingParty());
dataMap.put("sqjg", caseInfo.getTheWholeStory());
dataMap.put("wtlx", caseInfo.getBusinessClassifyName());
dataMap.put("bar", caseInfo.getInformant());
dataMap.put("basj", caseInfo.getInformantDriver());
dataMap.put("sjmz", caseInfo.getInformantDriver());
dataMap.put("bxxb", "123");
dataMap.put("jsje", "123");
dataMap.put("ajjlj", "123");
dataMap.put("stf", caseInfo.getEntrustingCompanyName());
dataMap.put("bgscsj", "2017-07-17");
docUtil.createDoc(dataMap, caseInfo.getUploadfile());
}
这是调用方法。
好了,那么就会根据你的模板生成你想要的word了
注意!!!!!!!!1如果总是出现模板ftl文件第多少行第多少列有问题的情况,请查看你的生成xml格式的时候是否选择的是2003版本的,如果还有问题,请重新做你的word模板1111