关于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>
相关推荐
正经人_x23 分钟前
学习日记34:UNETR
学习
科技林总25 分钟前
【系统分析师】12.3 软件架构描述与表示
学习
wincheshe33 分钟前
AI Agent 开发学习 --- 框架开发实践(三)
人工智能·学习
麦麦鸡腿堡1 小时前
JavaWeb_请求参数,设置响应数据,分层解耦
java·开发语言·前端
没有bug.的程序员2 小时前
Serverless 弹性扩容引发的全线熔断:Spring Boot 启动耗时从 1s 压缩至 0.3s 的物理级绞杀
java·spring boot·kubernetes·serverless·扩容·线上
bearpping2 小时前
java进阶知识点
java·开发语言
独自破碎E2 小时前
【面试真题拆解】你知道ThreadLocal是什么吗
java·jvm·面试
kkkkatoq2 小时前
JAVA中的IO操作
java·开发语言
2501_918126913 小时前
学习所有6502写游戏存档的语句
汇编·嵌入式硬件·学习·游戏·个人开发
深蓝轨迹3 小时前
@Autowired与@Resource:Spring依赖注入注解核心差异剖析
java·python·spring·注解