关于Java处理Office平台的研究就这样了吧,因为我发现要想完全掌握它不是短时间内能完成的。其实,这都完全可以立作一个项目进行研究了:研究一下微软的Office平台的底层数据格式原理;研究一下市面上现在提供哪些处理Office平台的Java类库工具;然后对这些工具进行比较,找出各自的优缺点;最后,可以综合以上的知识,开发一个自己的处理Office平台的Java类库工具。
大体描述:
l 概述:“java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。”。
(2013-03 http://www.iteye.com/problems/85607)
l Itext:“iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。”(2013-03 http://baike.baidu.com/view/2405889.htm)
l 概述与Java2word:“其实对于传统word文档的操作一般都会使用asp.net等语言去完成,java与com组件的通信还是其一大软肋。当前的com桥有poi、jcom、jacob等。其中poi简洁易用但功能较弱,jacob功能强大但上手较慢,需视需求而定。但这个问题在以openxml为基础的2007文档中是不存在的。2007文档实际上是一组xml的压缩包,其内部结构可以通过将.docx的文档改名为.rar(.zip)后打开查看便一目了然。这时我们只需要找到存储数据的xml,按照其格式来读取即可。”
“java2word是com桥jacob包的封装,它专门针对word文档的操作做了封装,方便使用。”(2013-03 http://blog.csdn.net/xiaogugood/article/details/8662928)
l Jacob:“它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库。它可运行在x86和支持32位和64位Java虚拟机 X64的环境。”(2013-03 http://baike.baidu.com/view/783738.htm#2)
l Java2word:“java2word,咱们国人开发的一个包,比网上介绍的poi,jacob等解决方按容易上手多了!虽然功能不是很多,但应该满足一般的需求。遗憾的是不支持07格式,如果你需要读写07格式,可以用一下openxml4j这个包。”
“java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。”
(2013-03http://blog.csdn.net/smartcat86/article/details/1847551)
(2013-03http://blog.csdn.net/xiaogugood/article/details/8662775)
这篇文章比较好,讲述了一些比较底层原理方面的,比如讲到了Word2007的文件数据格式标准等等。可以看一下,对理解Java处理Office平台很多帮助。
l 其他参考文章:
《利用poi操作word文档(针对docx格式)》(2013-03 http://blog.csdn.net/njchenyi/article/details/6901605)
《java简单解析docx、pptx、xlsx文档》(2013-03 http://fonter.iteye.com/blog/420319)
《Eclipse如何加载POI包》(2013-03 http://blog.csdn.net/xiaogugood/article/details/8662631)
其他解决方案:
a) “采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。 ”(2013-03 http://www.iteye.com/problems/85607)
利用C++/C#做Office平台的处理,然后将处理结果通过本地进程通信送给Java程序。毕竟Office是微软的产品,这样通过C++/C#调用微软提供的操作Office平台的接口,应该最为高效。