关于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>
相关推荐
七夜zippoe2 小时前
Spring与MyBatis整合原理及事务管理
java·spring·mybatis·事务·mapper
yaoxin5211232 小时前
278. Java Stream API - 限制与跳过操作全解析
java·开发语言·python
秦明月132 小时前
EPLAN电气设计:图层导入与导出操作指南
数据库·经验分享·学习·学习方法·设计规范
短剑重铸之日2 小时前
《深入解析JVM》第五章:JDK 8之后版本的优化与JDK 25前瞻
java·开发语言·jvm·后端
love530love2 小时前
【探讨】“父级/基环境损坏,子环境全部失效”,如何避免 .venv 受父级 Python 损坏影响?
java·开发语言·人工智能·windows·python·编程·ai编程
java硕哥2 小时前
Spring源码debug方法
java·后端·spring
小粉粉hhh2 小时前
记录前端菜鸟的日常——实现类似学习通的答题界面
学习
杂货铺的小掌柜3 小时前
MAC版IDEA常用快捷键
java·macos·intellij-idea
xjz18423 小时前
JVM虚拟线程:JEP 444开启Java并发编程新纪元
java