示例代码
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
XSSFClientAnchor xssfClientAnchor = patriarch.createAnchor(
XSSFShape.EMU_PER_PIXEL * 17,
XSSFShape.EMU_PER_PIXEL * 17,
XSSFShape.EMU_PER_PIXEL * 100,
XSSFShape.EMU_PER_PIXEL * 100,
1, 4, (short) 3,4 );
xssfClientAnchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);//设置图片随单元移动调整大小
patriarch.createPicture(xssfClientAnchor, workbook.addPicture(
InputStreamUtil.getImageBytes("https://www.epandian.cn/img/asset/asset_photo/201910/1571714809486c9457.jpg"), XSSFWorkbook.PICTURE_TYPE_JPEG));
注意项:
最开始以为XSSFClientAnchor 无参构造不能生效手动set了属性,发现一直不生效,难受!!!
最后终于发现,注意:
在指定的锚点位置上创建一个图形,注意:XSSFClientAnchor的dx1、dy1、dx2、dy2定义与HSSF不同,不再是0-1023、0-255的相对比率,而是一个固定单位的绝对定位,通常使用XSSFShape.EMU_PER_POINT(折合成1点)和XSSFShape.EMU_PER_PIXEL(折合成1像素)做为单位乘以1个值来定位
在XSSFClientAnchor 中如果你一直使用定值会发现各种调就是绝对必须不生效,所以划重点,必须使用XSSFShape属性来定位;
其次:
xssfClientAnchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);//设置图片随单元移动调整大小
这个属性也是必须的;
导出处理示例:
本地图片处理:
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
bufferImg = ImageIO.read(new File("F:/图片/照片/无名氏/小昭11.jpg"));
ImageIO.write(bufferImg, "jpg", byteArrayOut);
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("test picture");
//画图的*管理器,一个sheet只能获取一个(一定要注意这点)
HSSFPatriarch patriarch = sheet1.createDrawingPatriarch();
//anchor主要用于设置图片的属性
HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 255, 255,(short) 1, 1, (short) 5, 8);
anchor.setAnchorType(3);
//插入图片
patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
服务端图片导出:
服务端导出需获取图片访问URL后获取导出资源,具体得包自己去百度下!