Java生成word文档调研

java读写word

Posted by zhanghaichao on September 3, 2018

使用Java操作word的方法有这几个:IText,Apache的POI包,tm-extractors包,jacob包,java2word包。

  • IText包比较大,但是功能比较全。而且比较成熟,用的人也多。

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

  • tm-extractors包的API比较简单,调用起来很方便,代码量也少,但主要针对读取操作。

  • jacob包,可以操作word,excel。因为调用的是微软底层的dll文件,需要在system32目录下放置jacob.dll,然后在classpath里面添加jacob.jar文件。

  • java2word也是调用微软的底层dll文件,有安装包,也有解压包,安装包会将jacob.dll文件装在system32目录下。之后将java2word.jar加到classpath就可以使用了。感觉如果只是操作word文档的话,比jacob用起来要简单和舒服。代码量也少,很清晰。

  • FreeMarker适合有固定模版的文档,将Word文档另存为XML格式,将后缀名“xml”修改为“ftl”,使用Freemarker填充内容

  • PageOffice主要针对Web应用系统,可以在线读取编辑word,如果有固定模板可以进行数据填充,没有模板也可以使用空白文档作为模板然后自由发挥,总体来说功能比较强大,基于jacob不兼容Linux以及poi代码复杂功能不完善这些缺点给出的解决方案,但是商业需要收费。

  • docx4j主要用于word2007,同时也可以用于office 2007中的PowerPoint和Excel,弥补了poi对于2007支持不好,但是同样

综上,使用jacob和java2word的话,会在调用WINWORD进程,并且无法将服务部署到 Linux平台,要求安装office,

tm-extractors主要是进行word读取也不做考虑,

freemarker适合固定word模板填充,如果有定制化需求可以考虑。

iText是Java中用于创建和操作PDF文件的开源库,也支持对word的读写操作,但包比较大,且和pdfbox很多功能重复,可以考虑使用。

apache POI主要处理excel,但对于word也有支持,可以读写标题、段落、表格,缺点是不支持样式的设置和图片等插入。

1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。通过Jacob实现了在Java平台上对微软Office的COM接口进行调用。

  优点:调用微软Office的COM接口,生成的word文件格式规范。

  缺点:服务器只能是windows平台,不支持unix和linux,且服务器上必须安装微软Office。

2:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。

  优点:跨平台支持windows、unix和linux。

  缺点:相对与对word文件的处理来说,POI更适合excel处理,对于word实现一些简单文件的操作凑合,不能设置样式且生成的word文件格式不够规范。

3:Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。

  优点:足够简单,操作起来要比FreeMarker简单的多。

  缺点:没有FreeMarker强大,不能够根据模版生成Word文档,word的文档的样式等信息都不能够很好的操作。

4:FreeMarker生成word文档的功能是由XML+FreeMarker来实现的。先把word文件另存为xml,在xml文件中插入特殊的字符串占位符,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板,编码调用FreeMarker实现文本替换并输出Doc。

  优点:比Java2word功能强大,也是纯Java编程。

  缺点:生成的文件本质上是xml,不是真正的word文件格式,有很多常用的word格式无法处理或表现怪异,比如:超链、换行、乱码、部分生成的文件打不开等。

5:PageOffice生成word文件。PageOffice封装了微软Office繁琐的vba接口,提供了简洁易用的Java编程对象,支持生成word文件,同时实现了在线编辑word文档和读取word文档内容。

  优点:跨平台支持windows、unix和linux,生成word文件格式标准,支持文本、图片、表格、字体、段落、颜色、超链、页眉等各种格式的操作,支持多word合并,无需处理并发,不耗费服务器资源,运行稳定。

  缺点:必须在客户端生成文件(可以不显示界面),不支持纯服务器端生成文件。