关于word生成报告的POI学习2循环标题内容

一. 代码

1. 报告生成

java 复制代码
package com.dbapp;

import cn.hutool.core.io.IoUtil;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.*;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.deepoove.poi.policy.AttachmentRenderPolicy;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.SneakyThrows;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;

public class WordTemplateExample1 {
    @SneakyThrows
    public static void main(String[] args) {

        List<Attach> words = Lists.newArrayList();
        words.add(new Attach(Attachments.ofBytes(IoUtil.readBytes(new FileInputStream("D:\\hjp\\文档\\1.doc")), AttachmentType.DOCX).create(), "111"));
//        words.add(new Attach(Attachments.ofBytes(IoUtil.readBytes(new FileInputStream("D:\\test2.docx")), AttachmentType.DOCX).create(), "111"));
        Map<String, Object> dataModel = Maps.newHashMap();
        List<Pic> pics = Lists.newArrayList(
                new Pic(Pictures.ofStream(new FileInputStream("D:\\test.png"), PictureType.PNG).size(100, 120).create()),
                new Pic(Pictures.ofStream(new FileInputStream("D:\\test.png"), PictureType.PNG).size(100, 120).create())
        );
        List<EventRisk> records = Lists.newArrayList(
                new EventRisk("2.2.1", "2.2.1.1", "2.2.1.1.1","title1", "leve1", "url1", "check1", "description1", "advice1", words, pics),
                new EventRisk("2.2.2", "2.2.2.1", "2.2.1.1.1","title2", "leve2", "url2", "check2", "description2", "advice2", words, pics),
                new EventRisk("2.2.3", "2.2.3.1", "2.2.1.1.1","title3", "leve3", "url3", "check3", "description3", "advice3", words, pics),
                new EventRisk("2.2.4", "2.2.4.1", "2.2.1.1.1","titlt4", "leve4", "url4", "check4", "description4", "advice4", words, pics)
        );
        List<EventRiskCount> list= Lists.newArrayList(
                new EventRiskCount("1", "level1", "name1", "type1"),
                new EventRiskCount("2", "level2", "name2", "type2"),
                new EventRiskCount("3", "level3", "name3", "type3")
        );
        dataModel.put("records", records);
        dataModel.put("list", list);

        Configure config = Configure.builder()
                //将附件插件注册为新标签类型 使用{{%var}}
                .addPlugin('%', new AttachmentRenderPolicy())
                .bind("list",new LoopRowTableRenderPolicy("${","}"))
                .build();
        //进行报告生成 获取报告模板内容
        XWPFTemplate xwpfTemplate = XWPFTemplate.compile(new FileInputStream("D:\\template-new.docx"), config).render(dataModel);
        xwpfTemplate.write(new FileOutputStream("D:\\template1-new.docx"));
        xwpfTemplate.close();
    }


}

2.图片模版

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pic {
    private PictureRenderData pic;
}

3.其他附件模版

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Attach {
    private AttachmentRenderData attachment;
    private String name;
}

4. 事件模版

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class EventRisk {
    private String num1;
    private String num2;
    private String num3;
    private String title;
    private String level;
    private String url;
    private String check;
    private String description;
    private String advice;
    private List<Attach> words;
    private List<Pic> pics;
}
java 复制代码
@Data
@AllArgsConstructor
public class EventRiskCount {
    private String num;
    private String level;
    private String name;
    private String type;
}

5.模版



6.依赖

xml 复制代码
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>com.github.jhonnymertz</groupId>-->
        <!--            <artifactId>java-wkhtmltopdf-wrapper</artifactId>-->
        <!--            <version>1.1.6-1</version>-->
        <!--        </dependency>-->

        <!-- Flying Saucer + iText -->
        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>flying-saucer-pdf</artifactId>
            <version>9.1.22</version>
        </dependency>

        <!-- OpenHTML to PDF (基础) -->
        <!--<dependency>
            <groupId>com.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-core</artifactId>
            <version>${openhtml.version}</version>
        </dependency>

        &lt;!&ndash; PDFBox 渲染器 &ndash;&gt;
        <dependency>
            <groupId>com.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-pdfbox</artifactId>
            <version>${openhtml.version}</version>
        </dependency>

        &lt;!&ndash; Java2D 渲染器 (用于图片输出) &ndash;&gt;
        <dependency>
            <groupId>com.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-java2d</artifactId>
            <version>${openhtml.version}</version>
        </dependency>

        &lt;!&ndash; 字体支持 &ndash;&gt;
        <dependency>
            <groupId>com.openhtmltopdf</groupId>
            <artifactId>openhtmltopdf-rtl-support</artifactId>
            <version>${openhtml.version}</version>
        </dependency>

        &lt;!&ndash; 图片处理 &ndash;&gt;
        <dependency>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-codec</artifactId>
            <version>1.16</version>
        </dependency>-->
        <!--<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext7-core</artifactId>
            <version>7.1.16</version>
            <type>pom</type>
        </dependency>-->

        <!-- Maven 依赖 -->

        <!-- iText 7 Core -->
        <!-- <dependency>
             <groupId>com.itextpdf</groupId>
             <artifactId>kernel</artifactId>
             <version>${itext.version}</version>
         </dependency>-->

        <!-- iText 7 Layout -->
        <!--<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>layout</artifactId>
            <version>${itext.version}</version>
        </dependency>


        &lt;!&ndash; iText HTML2PDF &ndash;&gt;
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>html2pdf</artifactId>
            <version>${itext.version}</version>
        </dependency>

        &lt;!&ndash; 字体支持 &ndash;&gt;
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>font-asian</artifactId>
            <version>${itext.version}</version>
        </dependency>


    &lt;!&ndash; https://mvnrepository.com/artifact/io.woo/htmltopdf &ndash;&gt;
    <dependency>
        <groupId>io.woo</groupId>
        <artifactId>htmltopdf</artifactId>
        <version>1.0.8</version>
    </dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.38</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>32.1.2-jre</version>
        </dependency>
        <!-- Apache POI -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.10.5</version> <!-- 替换为你想要使用的特定版本 -->
        </dependency>

    </dependencies>
相关推荐
不停喝水2 分钟前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
y1su7 分钟前
Leetcode 二分模板
java·数据结构·算法·leetcode·排序算法
~光~~13 分钟前
【嵌入式linux学习】Cache 策略:Write-Through / Write-Back + Allocation
linux·学习·spring
霸道流氓气质27 分钟前
多Agent通信机制与协议设计完全指南:从FIPA-ACL到A2A/MCP的Java生产级实战
java·开发语言
007张三丰33 分钟前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理
骇客野人1 小时前
Java BIO / NIO / AIO 完整详解 + 编程技巧
java·开发语言·nio
霸道流氓气质1 小时前
OpenTelemetry 入门与实战:Java Agent、Spring Boot Starter与LLM调用追踪示例
java·开发语言·spring boot
m0_587383001 小时前
24 小时自助健身房系统软件开发实战指南与案例解析
java·spring boot·spring·系统架构·需求分析
栖凤1 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python