示例代碼
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后獲取導出資源,具體得包自己去百度下!