XWPFTemplate生成word

一、在Java领域中,处理Office文档是一项常见的需求,尤其是对于生成报告、合同或其他结构化文档。Apache POI是一个广泛使用的库,用于读写Microsoft Office格式文件(包括Word、Excel等)。

XWPFTemplate是基于Apache POI封装的一个强大的Word模板引擎,它允许开发人员通过定义特定占位符来创建可复用的Word文档模板,并能方便地将数据模型绑定到这些模板上,从而实现批量或动态生成Word文档的功能。

二、 XWPFTemplate的工作原理

2.1 模板定义

使用XWPFTemplate时,首先需要准备一个Word文档作为模板。在这个模板中,可以通过特定的语法(如${variable})来标识变量位置,这些变量将在运行时被实际的数据替换。此外,还可以支持条件判断、循环遍历等逻辑结构。

2.2 数据绑定与渲染

准备好模板后,开发者可以创建一个数据模型(通常是Java对象或是map),然后调用XWPFTemplate提供的API方法,将数据模型绑定到模板上。引擎会解析模板中的占位符,并根据数据模型的内容进行填充,最终生成一个新的包含实际内容的Word文档。

三、关键代码如下:

复制代码
          <dependency>
               <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.12.1</version>
        </dependency>

 public void preview(HttpServletResponse response, HashMap<String, Object> data) {

        ClassPathResource classPathResource = new ClassPathResource("model/eleReport.docx");
        InputStream is = null;
        try {
            is = classPathResource.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();

        
        // 进行编译
        Configure conf = Configure.builder().bind("defectInfo", policy).bind("zzInfo",policy).build();
        XWPFTemplate render = XWPFTemplate.compile(is, conf).render(data);
        try {
            response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            response.setCharacterEncoding("utf-8");
            render.write(response.getOutputStream());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

data的处理就是组装数据的过程,针对循环的变量需要指定策略policy,组装完数据,调用此方法,页面上即可生成报告了。

四、模板如下:

其他语法可参考:Poi-tl Documentation

相关推荐
用户9083246027316 小时前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
用户8307196840821 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解2 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解2 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记2 天前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者2 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840822 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Java水解3 天前
SpringBoot3全栈开发实战:从入门到精通的完整指南
spring boot·后端
初次攀爬者3 天前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
花花无缺3 天前
搞懂@Autowired 与@Resuorce
java·spring boot·后端