poi 替换文本框内容_原创 | JAVA + POI生成Microsoft Word文档

本文介绍如何使用Apache POI库动态生成.docx格式的Microsoft Word文档。通过创建模板文件,定义占位符,然后用Java代码替换占位符内容,实现Word文档的动态生成。文中提供了代码示例,帮助理解整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:日常工作中,我们经常会遇到要求动态生成Word文档内容的需求,如:简历、检查书、申请书等。

但是在之前Microsoft Office一直都是封闭式的体系,微软本身也未开放其生态,每年通过Office赚得盆满钵满。微软也未提供过任何开放式的接口或jdk来支持类似Word的动态生成等需求。因此这一块一直以来都令开发人员很是头疼,也出现了各种不同方式的实现,也有大神写出来可直接使用的jar包供大家开发使用。

Microsoft Word在2007版本之后,默认的后缀名就是.docx。底层的内容其实就是一堆xml文件+多媒体资源+主体定义等。示例如下图:

a3bc861b02959cfc243285419e06cb31.png

word文件夹内容如下所示:

9856ef48924d1bea7493290779223657.png

动态生成后的文档内容如果下载时不指定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的开发工具包,具体如下:

ffe5f471e134ba0c0096daf801767220.png

每种不同的jar所支持的场景说明如下:

8a1100d4237f1089c2bd1dca026cc1a9.png

大家可根据自身需要进行对应的选择,如Excel的.xls时选择poi即可;.xlsx时选择poi+poi-ooxml即可。更多内容请参阅:https://poi.apache.org/

定义模板:生成最终所需的Word文档前,我们需要根据实际需求先创建对应格式与内容的模板文件,模板文件为.docx格式,如:name_check_template.docx。在模板文件里定义好整个文档的样式、格式、结构以及通用的内容,将动态的内容以通配符进行占位。内容示例如下,一个模板文件中可以有多页内容,以实需为准:

4d0a705dd0daeedd3e5bfe82c5f80381.png

78ade5e9d40722302b54896c42c74abf.png

图中所示的:Enterprise、User、Phone等为需要替换的内容占位符,根据实际使用发现定义这些占位符时建议不能过长、中间不能有空格,也不能换行(哪怕是内容过长导致的自动换行)等,否则可能出现占位符未能成功替换,实际的效果还需要根据真实的生成时核对,可能需要一一调整最终才能达到完美的效果。

生成效果:在模板中我们可以定义表格,也可以是普通的Word段落正文、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值