由于java之诞生起,就是在linux下得到很好的发展,而微软的东西基本上始终只能在他的平台上运行,在实际的需求之中,对office办公软件的使用那是大大的,基本上每个企业都在使用,但是作为web项目中,难免有客户提出这样那样的需求,比如说:”系统自动生成word文档“ 这个需求也许会难倒不少人,因为在咱们Java的世界中,没有直接对office操作的组件或者说底层接口。
先说具体的需求:公司有很多种类型的word报告,而且类型不固定,可能随时增减(意思说word模板是不固定的),那么没增减一个word报告模板,只需要上传word模板,然后点击生成就能生成相应的报告,word中的数据来自于数据库中,还有可能来自于其他的固定word中(比如某种报告的固定头等),同时往word报告中写入的数据可能包含:文字、表格、图片等...具体需求就是这么多。
拿到这个命题,或者说为了满足这个需求,咱们一般的做法有很多种,你首先应该会想到:
(1)采用流的方式去解析word,这种方式可以实现简单的功能----文字什么的可以,假如需要处理word中的表格、图片等,咱们我还没有想到好办法。而且操作起来也相当复杂。
(2)采用开源的POI,这个也能实现简单的word生成,比如打开、读取、写入等、但是根据固定的格式去生成word。那么就很难了。同时对word的本身样式也不能很好支持,意思说 假如我想插入一段字符 ,但这段字符默认为 “黑体 加粗” 那就很难做到了。
(3)可能采用我们以前做过的一个方法来做,就是通过做好word模板,然后将其保存为xml文件,然后再解析xml文件,将固定字符解析出来,进行替换然后保存为一个word文档ok,但是你要是采用这种方式做的时候 ,你会发现特别麻烦,不过也是一个方式。
(4)采用一个java开源的组件-----jacob组件,也许你听说过,反正我现在是用这个来做的(这也是我推荐的),也是我要讲解的。采用这个技术能很好的实现上面的所有功能。
(5)采用itext-2.17-rtf 生成rtf格式的文档,word支持rtf文档的。这种也是可以的
(6)可能还有其他方式我就不说了,包括采用现在商业话的word控件来实现,但是实际上根本无法很好的满足这个需求,对做简单我觉得很好,花了钱的东西,自己做的工作相对可能少些。
(未完待续)