基于freeMarker和jacob的word导出
第一步、导入相关的jar包
这里主要用到两个jar包,由于后续再jacob操作的时候需要与windows组件进行交互,因此需要两个dll包,放在jdk或是jre的bin目录下。
freeMarkrt的包:
freemarker-2.3.13.jar
jacob的包和dll文件:
jacob.jar、jacob-1.15-M4-x64.dll和jacob-1.15-M4-x86.dll
查看附件:所用jar包。
第二步、相关代码编写及测试
首先我们要做的是基于freeMarker的word文档的导出。
因此我们先要生成freeMarker的xml模板文档。步骤如下:
(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批量转换word为txt、pdf、xps、html、xml等文档
参考三:http://www.havenliu.com/goodarticle/420.html
framemarket语法总结
参考四:http://www.havenliu.com/java/514.html
java生成复杂word文档的完美解决方案
参考五:freemarker中文参考手册(见附件)
参考六:XMLToWordTest.zip,来源:网络。(见附件)
参考七:导出word文档,来源:网络。(见附件)
注意:本代码未经测试,.ftl文件也没有排版,里面也没有freemarker的相关代码,但是这种方法本人在其他项目中用到过。这里只是发表参考代码。
所有附件都在csdn中我上传的文件“基于frameMarket和jacob的word导出参考文件”中可以下载到。如有什么问题,请大家在评论中给出。
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的样式 |