文章目录
- 前言
- 一、根据图片路径转为图片
- 总结
前言
列表数据导出,带图片,图片为 http://xxxxx/1.jpg 这种
如何处理图片就是重点
一、根据图片路径转为图片
废话不多说,直接上代码
书接上文: 通用导出
// 多个sheet
for (Sheet sheet : writer.getSheets()) {
// 循环每一条数据处理找出图片路径
for (int i = 0; i < commonDTO.getData().size(); i++) {
Map<String, Object> dataMap = commonDTO.getData().get(i);
// 包含图片路径
if (dataMap.containsKey("imageUrl")) {
String imageUrl = dataMap.get("imageUrl").toString();
if (StrUtil.isBlank(imageUrl)) {
continue;// 不包含跳过
}
InputStream imageStream = new URL(imageUrl).openStream();
// 将图片转为字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
BufferedImage image = ImageIO.read(imageStream);
ImageIO.write(image, "jpg", outputStream);
byte[] bytes = outputStream.toByteArray();
Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
// 设置图片单元格位置
// 0, 0, 0, 0, 前四个0 不用管,就这么传递
// excel的第一个单元格 A-1 的起始坐标为 0,0 ; 结束坐标为 1,1
// 2, i + 2 : 可以理解为此为图片的第一个坐标,也就时图片的起始位置,2 x方向位置;
// 2, i + 2 : 可以理解为此为图片的第一个坐标,也就时图片的起始位置,i+2 y方向位置;
// 3, i + 3 : 可以理解为此为图片的第二个坐标,也就是图片的结束位置,3 x方向位置;
// 3, i + 3 : 可以理解为此为图片的第二个坐标,也就是图片的结束位置,i+3 y方向位置;
// 图片嘛 是一个四边形,确定一个规则四边形的位置,只需要两个坐标就够了,它这里是用左上角和右下角的两个坐标确定的
ClientAnchor anchor = drawingPatriarch.createAnchor(0, 0, 0, 0, 2, i + 2, 3, i + 3);
// 设置图片行的高度
writer.setRowHeight(i + 2, 80);
// 随单元格改变位置和大小
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
// 添加图片
int pictureIndex = sheet.getWorkbook().addPicture(bytes, HSSFWorkbook.PICTURE_TYPE_JPEG);
drawingPatriarch.createPicture(anchor, pictureIndex);
}
}
}
}
总结
相信这个图片,一定可以让大家明白图片的坐标位置的概念了