springboot 集成poi导出word(一)
2024-10-12 09:31:10
使用ruoyi-前后端分离版本,根据word模板导出,包含表格和图片。
一、创建模板
列表使用{{}},文本使用[]
二、引入依赖
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency> <!-- Word工具 -->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</version>
</dependency>
三、调用接口
@PostMapping("/exportPic")
public void exportPic(HttpServletResponse response, InfoGroup infoGroup)
{
//从数据库中获取数据,组成list
groupService.exportPic(response,list);
}
四、WordUtil导出类
package com.ruoyi.common.utils.poi; import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.PictureRenderData;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import com.deepoove.poi.policy.PictureRenderPolicy;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import java.util.List; import com.ruoyi.common.core.domain.AjaxResult;
import org.apache.poi.util.Units;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse; import static com.deepoove.poi.data.PictureType.PNG;
import static com.ruoyi.common.config.RuoYiConfig.getProfile; /**
* Word导出方法
*/
public class WordUtil {
private static final Logger log = LoggerFactory.getLogger(WordUtil.class);
/**
* 导出信息图片
* @param data 导出模板数据
* @param response
* @return
* @throws Exception
*/
public AjaxResult exportPic(HttpServletResponse response,List<Map<String, Object>> data) throws Exception {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8"); Map<String, Object> datas = new HashMap<>();//传入word数据
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
List<String> pictureTag = new ArrayList<>();//图片处理
for (int i = 0; i < data.size(); i++) {
Map<String, Object> detailMap = new HashMap<String, Object>();//将word中标签名的例和对应数据保存到map
detailMap.put("name", data.get(i).get("name"));
//添加图片
BufferedImage image = ImageIO.read(new File(picPath));
detailMap.put("photo", new PictureRenderData(100, 100, PNG, image));
pictureTag.add("photo");//用于设置图片
}
list.add(detailMap);//将设置好的行保存到list集合中
}
//图片配置
LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
Configure config = Configure.builder().bind("lists", policy).build();//设置列表配置,如果有多个列表时需加.bind("list1", policy) 新列表配置即可
for (String tag : pictureTag
) {
config.customPolicy(tag, new PictureRenderPolicy());//设置图片,不然保存的是一串字符
}
datas.put("lists", list); //将列表保存到渲染的map中
//3.创建XWPFTemplate对象,并设置读取模板路径和要渲染的数据
String inputFile = getProfile() + "\\template\\pic.docx";
XWPFTemplate template = XWPFTemplate.compile(inputFile, config).render(datas);
//compile(模板路径,对应的配置)方法是设置模板路径和模板配置的,如果不设置配置时可不传config
//render(datas)方法是用来渲染数据,将准备好的map数据方进去渲染
//4.模板的输出,用FileOutputStream输出流(可以输出到指定文件位置,也可以用ajax直接返回给浏览器下载)
//FileOutputStream out = null;//创建文件输出流并指定位置
try {
//out = new FileOutputStream(getProfile() + "\\download\\picOut.docx");
//template.write(out);
//out.flush();
//out.close();
template.write(response.getOutputStream());
template.close();
return AjaxResult.success("成功");
} catch (FileNotFoundException e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
}
}
五、导出页面调用,使用现成的导出方法
this.download('test/exportPic', {
...this.queryParams
}, `test.docx`)
最新文章
- 蓄水池算法(Reservoir Sampling)
- super 要点
- DWZ的选择带回功能无法带回第一个value中的值
- javascript——web前端编程
- JAVA多线程二
- webqq 获得好友列表hash算法 获得最新hash的方法
- 2015第43周三memcached
- Annotation(二)——Hibernate中注解的开发
- 64位windows8.1编译openjdk8
- 【中文分词】结构化感知器SP
- Leetcode解题-链表(2.2.1)AddTwoNumbers
- 转换Word文档为PDF文件
- Jsの练习-数组其他常用方法 -map() ,filter() ,every() ,some()
- quartz一次简单应用经历
- Laravel日志
- flask 面试题
- perl debug
- mysql 设置 innodb_print_all_deadlocks=ON, 保存死锁日志
- 创建DLL动态链接库——声明导出法
- 20155205 《Java程序设计》0510课上实践博客