在java 用xml模板通过freemarker生成word文档

先贴一段代码,这是根据网上的代码稍作修改后可以直接运行

需要下载freemarker.jar

maven的项目直接引用

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>


package com.yh.ibd.web;


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.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;


import com.yh.ibd.model.HL;


import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import sun.misc.BASE64Encoder;


public class WordGenrate {
	public static void main(String [] args) throws IOException{
		HL hl = new HL();
		hl.setIhlCode("aaaaa");
		hl.setIhlId("123");
		Map<String, Object> dataMap = getDataMap(hl);
		createDoc(dataMap);
	}
	
	 public static void createDoc(Map<String, Object> dataMap){
         try{
        	 	Configuration configure = null;
        	 	configure= new Configuration();
                configure.setDefaultEncoding("utf-8");
                //加载需要装填的模板
                Template template  = null;
                
                //加载模板文件
                configure.setClassForTemplateLoading(WordGenrate.class,"");//这里是指定模板的位置,“”为空说明是在当前类的同级目录下
                //设置对象包装器
                configure.setObjectWrapper(new DefaultObjectWrapper());
                //设置异常处理器
                configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
                //定义Template对象,注意模板类型名字与downloadType要一致
                template= configure.getTemplate("hlTemplate2.xml","UTF-8");//调用整理好的模板文件
                //输出文档
                File outFile = new File("E:\\wenjian\\hlTemplate.doc");//这里是生成好的word文档的输出地址
                Writer out = null;
                out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));                                   
                template.process(dataMap,out);
                outFile.delete();
         }catch (Exception e) {
                e.printStackTrace();
         }
	 }
	
	private static Map<String, Object> getDataMap(HL hl){
		Map<String, Object> dataMap = new HashMap<String, Object>();
		dataMap = setObjToMap(hl);
		return dataMap;
	}
	
	public static Map<String,Object> setObjToMap(Object obj){
		Map<String,Object> dataMap = new HashMap<String,Object>();
        Class c;
        try {
            c = Class.forName(obj.getClass().getName());
            Method[] methods = c.getMethods();
            for(int i=0,l=methods.length;i<l;i++){
                String method = methods[i].getName();
                System.out.println("The method is:" + method);
                if(method.startsWith("get")){
                    Object value = methods[i].invoke(obj);
                    if(value != null){
                        if(value.getClass().getClassLoader() != null){  //处理自定义的对象类型
                            setObjToMap(value);
                        }
                        String key = method.substring(3);
                        key = key.substring(0, 1).toLowerCase() + key.substring(1);
                        /*if("java.util.Date".equals(value.getClass().getName())){
                            value = DateUtil.dateToString((Date)value);
                        }*/
                        dataMap.put(key, value);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dataMap;
    }
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值