基于freeMarker和jacob的word导出

 

基于freeMarkerjacobword导出

第一步、导入相关的jar

这里主要用到两个jar包,由于后续再jacob操作的时候需要与windows组件进行交互,因此需要两个dll包,放在jdk或是jrebin目录下。

freeMarkrt的包:

freemarker-2.3.13.jar

jacob的包和dll文件:

jacob.jarjacob-1.15-M4-x64.dlljacob-1.15-M4-x86.dll

查看附件:所用jar包。

第二步、相关代码编写及测试

首先我们要做的是基于freeMarkerword文档的导出。

因此我们先要生成freeMarkerxml模板文档。步骤如下:

1)做好原始doc文档。见附件:emportTestFile.doc,这里需要注意的是,在里面需要填充内容的部分随便写几个标识,我写的是“占位”两个字。

2)另存一份xml文档,并将其扩展名直接改为.ftl即可。这里介绍一个xml文档编辑的利器“firstobject XML Editor”,用它来对杂乱无章的xml文档进行排版。

注:安装完成“firstobject XML Editor”后设置:Tools-Preferencs,将Indent改为Tabs。然后按F8就可进行快速排版。

3)代码编写,查看附件:源码toWordBasefreeMarkerAndJacob

注:图片的导出,在源码中有体现。

对于BASE64Encoder报错问题:

方案一:

只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。

方案二:

BASE64Decoder

这个没有java doc,属于jdk里不推荐使用的工具类。

强烈建议不要用sun.misc,是不安全的,最好不要使用。

建议使用apache common中的Base64替换

你可以在这里下载Apache commons codec:

http://commons.apache.org/codec/

 

 

参考说明

参考一:study_jacob.zip,学习jacob的工程,来源:网络。(见附件

参考二:http://blog.csdn.net/maxuyang1987/article/details/17097573

                   使用Jacob批量转换wordtxtpdfxpshtmlxml等文档

参考三:http://www.havenliu.com/goodarticle/420.html

                   framemarket语法总结

参考四:http://www.havenliu.com/java/514.html

                   java生成复杂word文档的完美解决方案

参考五:freemarker中文参考手册(见附件

参考六:XMLToWordTest.zip,来源:网络。(见附件

参考七:导出word文档,来源:网络。(见附件

 

注意:本代码未经测试,.ftl文件也没有排版,里面也没有freemarker的相关代码,但是这种方法本人在其他项目中用到过。这里只是发表参考代码。

所有附件都在csdn中我上传的文件“基于frameMarketjacobword导出参考文件”中可以下载到。如有什么问题,请大家在评论中给出。


java生成word和excel技术对比

JAVA生成word优缺点对比

所用技术

优点

缺点

Jacob

功能强大

代码量大,设置样式繁琐;需要windows平台支持,无法跨平台

Apache POI

读写excel功能强大、操作简单

一般只用它读取word,能够创建简单的word,不能设置样式,功能太少

Java2word

功能强大,操作简单

能满足一般要求,不支持07格式,国人开发的,参考资料较多,需要windows平台支持

iText

功能全,能满足一般要求

不能直接生成或操作doc文档,只能生成rtf格式的文档,rtf也可以用word打开

JSP

操作简单,代码量少

能把当前页面导出简单的word,不能设置样式,美观性差,无法操作word

XML(最佳)

代码量少,样式、内容容易控制,打印不变形,完全符合office标准

需要提前设计好word模板,把需要替换的地方用特殊标记标出来

 

JAVA生成pdf优缺点对比

所用技术

优点

缺点

openoffice

本身就是office软件,很容易设计一些文档模板,支持java调用实现word转换成pdf

需要先安装,设计好pdf模板样式,然后用程序来填充那些预留好的变量

itext 

能满足要求,本身提供了一些api

无法识别很多html的tag和attribute,无法识别css,需要用其api函数来设置样式

Jasper Report

能满足要求,市面上使用的比较多,相关文档多

复杂,很难完全掌握,需要先设计模板,强依赖于IDE进行可视化编辑

flying sauser(最佳)

能解析html和css输出成image、pdf等格式,操作简单,api强大

需要编写freemarker或velocity模板,打造html,勾画pdf的样式


使用freemarker生成word ,并集成struts2 同时生成及下载文档 资料附有Java源代码和自己总结的使用说明及注意事项 大至预览如下: 1、用word编辑好模板 普通字符串替换为 ${string} 表格循环用标签 姓名:${user.userName} , 性别:${user.sex} 2、将word模板另存为xml格式 3、将xml模板文件后缀名改为.ftl 4、编辑ftl文件 注意 编辑word模板时,${string} 标签最好是手动一次性输入完毕,或者使用记事本统一将整个${string}编辑好之后,粘贴至word里边。 也就是说,不要在word里首先打完 ${ } 之后,又从其它地方把 string 字符串粘贴至 { } 之间,这样在 word 转化为 xml时,解析会有问题,freemarker解析时,会报错。 /** * @Desc:生成word文件 * @Author:张轮 * @Date:2014-1-22下午05:33:42 * @param dataMap word中需要展示的动态数据,用map集合来保存 * @param templateName word模板名称,例如:test.ftl * @param filePath 文件生成的目标路径,例如:D:/wordFile/ * @param fileName 生成的文件名称,例如:test.doc */ @SuppressWarnings("unchecked") public static void createWord(Map dataMap,String templateName,String filePath,String fileName){ try { //创建配置实例 Configuration configuration = new Configuration(); //设置编码 configuration.setDefaultEncoding("UTF-8"); //ftl模板文件统一放至 com.lun.template 包下面 configuration.setClassForTemplateLoading(WordUtil.class,"/com/lun/template/"); //获取模板 Template template = configuration.getTemplate(templateName); //输出文件 File outFile = new File(filePath+File.separator+fileName); //如果输出目标文件夹不存在,则创建 if (!outFile.getParentFile().exists()){ outFile.getParentFile().mkdirs(); } //将模板和数据模型合并生成文件 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8")); //生成文件 template.process(dataMap, out); //关闭流 out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值