壹
说明:日常工作中,我们经常会遇到要求动态生成Word文档内容的需求,如:简历、检查书、申请书等。
但是在之前Microsoft Office一直都是封闭式的体系,微软本身也未开放其生态,每年通过Office赚得盆满钵满。微软也未提供过任何开放式的接口或jdk来支持类似Word的动态生成等需求。因此这一块一直以来都令开发人员很是头疼,也出现了各种不同方式的实现,也有大神写出来可直接使用的jar包供大家开发使用。
Microsoft Word在2007版本之后,默认的后缀名就是.docx。底层的内容其实就是一堆xml文件+多媒体资源+主体定义等。示例如下图:
word文件夹内容如下所示:
动态生成后的文档内容如果下载时不指定response的ContentType的话,直接下载下来的内容就如上图一样,那怕你生成时将文件名称后缀指定为.doc或.docx都无解。
大家可以全篇看完自行体验一下,了解一下底层的数据结构。下次另开一篇讲解Java web下的文档下载实现。
贰
开源依赖:今天我们展示通过org.apache.poi开源第三方工具包来实现Word文档的动态生成。Maven的依赖可通过:https://search.maven.org/artifact/org.apache.poi/poi获取到对应版本。在写本文当下最新版本已经更新到了4.1.2,我使用的是4.1.1版本体验,通过添加以下依赖到pom.xml中即可:
<dependency> <groupId>org.apache.poigroupId> <artifactId>poi-scratchpadartifactId> <version>4.1.1version>dependency><dependency> <groupId>org.apache.poigroupId> <artifactId>poi-ooxmlartifactId> <version>4.1.1version>dependency>
poi-ooxml主要用于生成.docx格式的word。今天我们示例也是生成.docx格式文档,而非.doc格式文档。
在整个org.apache.poi开源项目中提供多个针对Microsoft Office的开发工具包,具体如下:
每种不同的jar所支持的场景说明如下:
大家可根据自身需要进行对应的选择,如Excel的.xls时选择poi即可;.xlsx时选择poi+poi-ooxml即可。更多内容请参阅:https://poi.apache.org/
叁
定义模板:生成最终所需的Word文档前,我们需要根据实际需求先创建对应格式与内容的模板文件,模板文件为.docx格式,如:name_check_template.docx。在模板文件里定义好整个文档的样式、格式、结构以及通用的内容,将动态的内容以通配符进行占位。内容示例如下,一个模板文件中可以有多页内容,以实需为准:
图中所示的:Enterprise、User、Phone等为需要替换的