根据word模板生成word内容(JAVA)

主要是借助 poi-tl 来实现业务需求

当时第一次尝试的是Apache poi不是很好用,不推荐

第二次是xml,找的眼睛都花了,不推荐

要求:jdk1.8+,Apache POI5.2.2+ 我这里使用的是5.2.3版本

文档:Poi-tl Documentation

java 复制代码
<!-- Apache POI  -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>5.2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>5.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.12.2</version>
        </dependency>

注意这里需要确保没有其他的版本的poi,否则项目启动会报找不到类等错误,例如出现 java.lang.NoSuchFieldError:Factory

解决方式:此问题是由pom依赖导致,通过Ctrl+N查看ThemeDocument类,出现多个版本,发现引入了两个不同版本的poi包,导致版本冲突。

其中NoSuchMethodError 、ClassNotFoundException 、NoClassDefFoundError异常都是版本不对的问题,需要升级版本


代码部分

java 复制代码
// 利用map结构存储数据
            Map<String, Object> data = new HashMap<>();
// 指定路径 compile 编译模板 render添加数据源
XWPFTemplate template = XWPFTemplate.compile("xxx.docx").render(data);

  try {
                //write 输出到流
                template.writeAndClose(new FileOutputStream(输出路径"));
            } catch (IOException e) {
                e.printStackTrace();
                log.error("写入文件出错了");
            }

模板部分,使用poi-tl最大的难点或者说工作量在于模板的制作,具体可以看上面文档,文档中拥有具体格式。

  • 普通替换,只需要{{属性名}}
  • 逻辑判断是否显示:{{?属性名}}...{{/属性名}}
  • 列表{{*列表名}} 在这里,我单纯只使用了List<String>,文档中有更复杂的形式,包括对象
  • 表格我这里没有涉及到,不做考虑
相关推荐
文丑颜不良啊2 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang3 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪3 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息4 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼4 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff5 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff6 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
David猪大卫6 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
SL_staff7 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品
nice_lcj5207 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发