关于freemarker操作word的相关问题

首先使用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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值