dcom组件有excel没有word_技术共享 | Java后台导出word实现思路
发布日期:2021-06-24 13:27:31 浏览次数:2 分类:技术文章

本文共 1666 字,大约阅读时间需要 5 分钟。

汽车行业中,需要撰写各种分析报告,结合工具系统导出内容进行分析将事半功倍。仅在此分享最近实践中如何将大量图片、表格等导出为word文档使用的方法及需要注意的坑。

首先分享目前论坛上有的几种方法及他们的优劣势对比:

方法1:Apache POI

Apache POI是Apache软件基金会的开放源码函式库,包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件;

方法2:“Jacob”

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

方法3:Java2word

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

方法4:XML

用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。

c9fc556a062df03797bdc270c601fd22.png

综上所述,方法4生成的word文档符合office标准,样式、内容、目录容易控制,打印也不变形,而且可以实现office2003和office2007版本导出,并且可以实现多个word合并的功能。

除此之外,因业务需求,需要导出3个版本的word,其中两个word有重复的内容。实现思路为:将word文件分为几个板块,拆分成多个word,分工协作,然后将word合并起来,避免重复开发,减少开发时间。经过各种尝试,最终发现只有word2007版本有合并方法,因此考虑使用方法4,word2007版本基于xml模板方法实现。

但是方法4对于富文本导出word实现比较困难,经过尝试,方法2可以实现富文本导出word,doc、docx相互转换功能,同时支持多个图片导出功能。因此word导出结合了方法4和方法2。

使用过程中需要注意的坑:

1、使用方法4需要注意office2003和2007实现方法不一样,office2003需要将导出的xml重命名为ftl结尾的文件格式,将ftl模板文件复制到项目的指定路径下,就可以导出word了。office2007需要将word文件重命名为以zip结尾的压缩文件,打开zip文件,找到word文件夹下的document.xml文件,进行FreeMarker模板填充,然后放到项目指定的路径下,就可以导出word。所以需要注意word是2003版本还是2007版本。

2.使用jacob方法要注意:(1)从官网上下载dll文件,将dll文件放到jre的bin目录下,并且要注意jdk的版本(如图)

99f63a5928cf94a16a6114836eeea339.png

(2)如果将dll放到指定的目录下,但是还是不能导出word,要注意windows服务器中是否安装了office;在注册表编辑器中,是否能找到HKEY_CLASSES_ROOT/Word.Application,如果没找到说明没安装office。

5aa02606354170d7148236effd978ecc.png

9e52141d333bb18d0d9a87a47c91341a.png

(3)由于xml中不识别一些特殊字符,如、&等字符,需要将这些字符转换为实体。下面是五个在xml文档中预定义好的实体:

>   

    大于号

&    &    和

'    '    单引号

"    "    双引号

以上就是通过系统导出word文档的实现方法,欢迎分享或交流,谢谢。

转载地址:https://blog.csdn.net/weixin_33178459/article/details/112237920 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:word中套用表格样式在哪里_Word 中的表格如何排序?
下一篇:maven 修改文件名_[070]maven

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月24日 15时05分13秒