java Web导出word完美解决方案(转载)

近期项目中部分数据要求word导出,苦于将word文档另存htm或编写jsp页面,导出后的文件不能100%与原文件一致,借助jacob调用msword dll技术,要求服务器端必须安装office,而且技术难度大等原因,最终采用xml(word另存xml)+ FreeMarker技术完美实现word文档导出功能,详细步骤如下:

1.打开word文档,另存为xml文件,如下图:

 

2.编辑该xml文件,添加freemarker标签,再将该xml文件另存为ftl文件。

3.编写java代码填充模板数据,输出最终word文档。

代码参考:

   Configuration cfg = new Configuration();
   cfg.setDefaultEncoding("UTF-8");  
   cfg.setOutputEncoding("UTF-8");  
   cfg.setLocale(Locale.US);  
   String tempDir = "F:/workspace/CaspDemo/war/template";// 定义模板存放路径
   String tempName = "FlightQueryRequest.ftl";// 定义模板名
   String outputName = "F:/workspace/CaspDemo/war/template/test.doc";// 定义输出文件名
   cfg.setDirectoryForTemplateLoading(new File(tempDir));
   Template temp = cfg.getTemplate(tempName,"UTF-8");
   
   Map<String, Object> map = new HashMap<String, Object>();
   map.put("userID", "lamfire");
   map.put("departureDateTime", "1010-8-8");
         
   LPMVO lpmVO=new LPMVO();
   map.put("lpmVO",lpmVO);
   // 定义生成文件
   File output = new File(outputName);
   Writer writer = new FileWriter(output);
   temp.process(map, writer);

   注:遍历类对象私有属性及属性值

   Class clazz = map.get("lpmVO").getClass();
   Field[] f = clazz.getDeclaredFields();
   String[] name = field2Name(f);
   Object[] value = field2Value(f, map.get("lpmVO"));

public static String[] field2Name(Field[] f) {
  String[] name = new String[f.length];
  for (int i = 0; i < f.length; i++) {
   name[i] = f[i].getName();
  }
  return name;
 }

 public static Object[] field2Value(Field[] f, Object o) throws Exception {
  Field.setAccessible(f, true);
  Object[] value = new Object[f.length];
  for (int i = 0; i < f.length; i++) {
   value[i] = f[i].get(o);
  }
  return value;
 }

转载于:https://www.cnblogs.com/growing/archive/2011/12/29/2306081.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值