基于网上给出的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等环境下的排版软件