关于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>
相关推荐
该昵称用户已存在5 分钟前
从成本中心到价值引擎:MyEMS 开源系统激活企业能源数据资产
java·后端·struts
隐退山林6 分钟前
JavaEE进阶:SpringBoot配置文件
java·spring boot·java-ee
阿维的博客日记17 分钟前
求解深分页问题,last pk适合什么情况
java·mysql·深分页
被考核重击30 分钟前
WASM学习笔记
笔记·学习·wasm
MediaTea37 分钟前
人工智能通识课:机器学习之监督学习
人工智能·学习·机器学习
三品吉他手会点灯42 分钟前
C语言学习笔记 - 27.C编程预备计算机专业知识 - 什么是字节
c语言·开发语言·笔记·学习
yunhuibin1 小时前
videopipe学习之节点数据流转机制探索
学习
极客先躯1 小时前
高级java每日一道面试题-2025年12月09日-实战篇[Docker]-如何配置 Docker 的日志驱动?有哪些日志驱动可选?
java·docker·日志驱动的作用与配置层级·日志驱动全览与对比·日志驱动配置的要点·日志标签定制·容器与宿主机时间戳
憧憬成为java架构高手的小白1 小时前
n8n学习(基于b站秋芝2046)
学习