一. 代码
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>
<!– PDFBox 渲染器 –>
<dependency>
<groupId>com.openhtmltopdf</groupId>
<artifactId>openhtmltopdf-pdfbox</artifactId>
<version>${openhtml.version}</version>
</dependency>
<!– Java2D 渲染器 (用于图片输出) –>
<dependency>
<groupId>com.openhtmltopdf</groupId>
<artifactId>openhtmltopdf-java2d</artifactId>
<version>${openhtml.version}</version>
</dependency>
<!– 字体支持 –>
<dependency>
<groupId>com.openhtmltopdf</groupId>
<artifactId>openhtmltopdf-rtl-support</artifactId>
<version>${openhtml.version}</version>
</dependency>
<!– 图片处理 –>
<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>
<!– iText HTML2PDF –>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>html2pdf</artifactId>
<version>${itext.version}</version>
</dependency>
<!– 字体支持 –>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>${itext.version}</version>
</dependency>
<!– https://mvnrepository.com/artifact/io.woo/htmltopdf –>
<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>