关于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>
相关推荐
咖啡八杯3 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
用户1285261160211 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
Linsk11 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦12 小时前
用Gemini高效解决Java代码报错难以定位的问题
java
用户2986985301416 小时前
Word 文档字符级格式化:Java 实现方案详解
java·后端
笨鸟飞不快16 小时前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码16 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking16 小时前
Java微服务练习方式
java·后端·微服务
朦胧之1 天前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅1 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java