前端传过来一张echarts图片(base64),我需要将这张图片插入到表格中,我想根据图片的宽高计算图片位置的结束行、结束列,并且不让图片变形。比如设置图片插入的位置是从第一行、第一列开始,然后计算结束行、结束列。有什么办法实现吗?
目前代码如下:
/**
* 导出Excel,并追加图片
* @param workbook XSSFWorkbook对象
* @param sheetIndex sheet的下标索引
*/
public static void insertImage(Workbook workbook,int sheetIndex, String imgBase64){
Sheet sheet = workbook.getSheetAt(sheetIndex);
String[] imgUrlArr = imgBase64.split("base64,"); //拆分base64编码后部分
byte[] buffer = new BASE64Decoder().decodeBuffer(imgUrlArr[1]);
BufferedImage bufferImg = ImageIO.read(new ByteArrayInputStream(buffer));
// 除以9、25是假设我的单元格列宽为9(字符),行高为25(磅)
Double col = bufferImg.getWidth() * 0.5 / 9 / (bufferImg.getWidth() / bufferImg.getHeight()); // (图片缩小0.5倍)结束单元格的列号
Double row = bufferImg.getHeight() * 0.5 / 25; // (图片缩小0.5倍)结束单元格的行号
try {
// 创建图片锚点并设置偏移量
Drawing<?> patri = sheet.createDrawingPatriarch();
ClientAnchor anchor = patri.createAnchor(0,0,0,0,0,0,col.intValue(),row.intValue());
// 添加图片到工作簿并设置锚点
int pictureIdx = workbook.addPicture(buffer, Workbook.PICTURE_TYPE_PNG);
patri.createPicture(anchor, pictureIdx);
} catch (Exception ex) {
ex.printStackTrace();
}
}