Java生成复杂word/pdf解决方案

基于网上给出的java导出word和pdf的解决方式,我现在给大家提供一下我正在使用的方案;

先将网上的内容回顾一下;

常见的导出word的方案

1、Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。

2、 Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。

3、 Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。
这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。填充数据到表格中读取表格数据 ,1.1版增强的功能: 指定文本样式,指定表格样式。如此,则可动态排版word文档。

4、 iText操作Excel还行。对于复杂的大量的word也是噩梦。用法很简单, 但是功能很少, 不能设置打印方向等问题。

5、 JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。

6、 用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。


java生成pdf方案总结:

1. Jasper Report生成pdf:设计思路是先生成模板,然后得到数据,最后将两者整合得到结果。但是Jasper Report的问题在于,其生成模板的方式过       于复杂,即使有IDE的帮助,我们还是需要对其中的众多规则有所了解才行,否则就会给调试带来极大的麻烦。

2. openoffice生成pdf:openoffice是开源软件且能在windows和linux平台下运行。

3. itext + flying saucer生成pdf:itext和flying saucer都是免费开源的,且与平台无关,结合css和velocity技术,可以很好的实现。

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的样式

///

邪恶的分割线,以下是我处理word 的常用解决方式:

Birt报表的设计和导出word及其他格式文件:

由于通过Birt报表引擎的可以直接导出PDF,HTML,Word,Excel,PPT等格式.具体步骤:

1.设计报表的模板,这部分可以直接在Eclipse中可视化完成,生成".rptdesign"的设计模板(XML格式),事实上每套设计模板都需要实现制定数据源,最好是同    时指定相应的"XSD"文件,直接在eclipse中的可以看到各种格式的预览效果

2.通过解析xml更改 rptdesign 中描述数据源的标签

   将符合"xsd"的数据源文件的地址写入rptdesign

3.调用Birt引擎载入rptdesign,动态生成需要的格式文件,如word,pdf的没过

优势:

@只需要一套rptdesign文件,就可以生成所有格式的文件,因为所有的格式都是在第三步中动态制定的

劣势:

@文件的最后染效果是由birt实现的,当结果不满足自己的要求时,很难排查具体的原因.


利用WordprocessingML生成word

1.office word 2003 版以后的word 排版软件可以支持导出xml,从而对word的操作可以改变成为对xml的操作

2.官方http://rep.oio.dk/Microsoft.com/officeschemas/wordprocessingml_article.htm#wordprocessingml_article_section1wordprocessingmloverview

优势:

@这种形式类似于 "用freemaker导出word",但是因为对xml的操作更加灵活,你可以在代码中随意添加逻辑控制,如循环和条件判断

劣势:

@需要详细了解xml标签的内容,工作量比较大.

@最后生成的xml文件可以用microsoft office的软件打开,但是目前不支持wps和其他linux等环境下的排版软件







你可能感兴趣的:(Java)