若依实现导出多图功能
若依版本
v3.6.5微服务版本
需求
后台管理系统中,列表数据导出时,如果列表的记录中有个picUrls信息项,存储的是图片URL,若依本身没有支持多图导出
实现
修改导出Excel数据注解
在Excel.java 注解类中,ColumnType 枚举类中增加一项IMAGES(4) ,用于注解数据对象的图片URL集合属性。
使用示例:
@Excel(name = "问题图片", width = 80, height = 90, cellType = Excel.ColumnType.IMAGES)
private String picUrls;
ExcelUtil工具类完善
在setCellVo 方法中,增加以下代码:
public void setCellVo(Object value, Excel attr, Cell cell) {
if (ColumnType.STRING == attr.cellType() || ColumnType.TEXT == attr.cellType()) {
// 其他代码
...
} else if (ColumnType.IMAGES == attr.cellType()) {
try {
cell.setCellValue("");
Sheet _sheet = cell.getSheet();
int col = cell.getColumnIndex();
int row = cell.getRow().getRowNum();
// 因为我这里picUrls内存储的是json字符串
String jsonStr = Convert.toStr(value);
JSONArray array = JSON.parseArray(jsonStr);
if (array == null || array.isEmpty()) {
return;
}
// ===============关键:Excel单元格内单位===============
int EMU = 9525; // Excel标准单位(固定不要动)
int IMG_WIDTH = 110; // 每张图片宽度(固定)
int IMG_HEIGHT = 110; // 每张图片高度(固定)
int GAP = 15; // 图片间距
int TOP = 5; // 上边距
// 行高
cell.getRow().setHeightInPoints(120);
Drawing<?> drawing = _sheet.createDrawingPatriarch();
if (drawing == null) {
drawing = _sheet.createDrawingPatriarch();
}
for (int i = 0; i < array.size(); i++) {
// ==========核心修复:水平偏移公式============
int x = i * (IMG_WIDTH + GAP);
int dx1 = x * EMU; // 第i张图的起始X
int dy1 = TOP * EMU; // 顶部边距
int dx2 = (x + IMG_WIDTH) * EMU; // 结束X
int dy2 = (TOP + IMG_HEIGHT) * EMU; // 高度
ClientAnchor anchor = _sheet.getWorkbook().getCreationHelper().createClientAnchor();
anchor.setDx1(dx1);
anchor.setDy1(dy1);
anchor.setDx2(dx2);
anchor.setDy2(dy2);
anchor.setCol1(col);
anchor.setRow1(row);
anchor.setCol2(col);
anchor.setRow2(row);
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
JSONObject json = array.getJSONObject(i);
String pic = json.getString("pic");
byte[] data = ImageUtils.getImage(pic);
if (data == null || data.length == 0) {
continue;
}
int picType = Workbook.PICTURE_TYPE_JPEG;
try {
int type = getImageType(data);
if (type == 6) picType = Workbook.PICTURE_TYPE_JPEG;
} catch (Exception e) {
log.error("获取图片数据出错:{}", e.getMessage(), e);
}
int index = _sheet.getWorkbook().addPicture(data, picType);
drawing.createPicture(anchor, index);
}
} catch (Exception e) {
log.error("插入多图失败:{}", e.getMessage());
}
}
}
实际效果

正文到此结束
- 本文标签: 若依 Java 微服务
- 本文链接: https://www.iquanzi.top/article/12
- 版权声明: 本文由张华永原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权