POI导出多张图片到Excel
1 package com.sun.office.excel; 2 3 import java.awt.image.BufferedImage; 4 import java.io.ByteArrayOutputStream; 5 import java.io.File; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 9 import javax.imageio.ImageIO; 10 11 import org.apache.poi.hssf.usermodel.HSSFClientAnchor; 12 import org.apache.poi.hssf.usermodel.HSSFPatriarch; 13 import org.apache.poi.hssf.usermodel.HSSFSheet; 14 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 15 16 public class ExcelImageDemo { 17 18 public static void main(String[] args) { 19 FileOutputStream fileOut = null; 20 BufferedImage bufferImg = null; 21 // 先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray 22 try { 23 ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 24 bufferImg = ImageIO.read(new File("D:/ubuntn.jpg")); 25 ImageIO.write(bufferImg, "jpg", byteArrayOut); 26 27 HSSFWorkbook wb = new HSSFWorkbook(); 28 HSSFSheet sheet1 = wb.createSheet("test picture"); 29 // 画图的顶级管理器,一个sheet只能获取一个(一定要注意这点) 30 HSSFPatriarch patriarch = sheet1.createDrawingPatriarch(); 31 for (int i = 0; i < 3; i++) { 32 // anchor主要用于设置图片的属性 33 HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 250, (short) 1, 1+i*10, (short) 5, 8+i*10); 34 // 插入图片 35 patriarch.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 36 } 37 HSSFSheet sheet2 = wb.createSheet("test picture2"); 38 //第二个sheet页 39 HSSFPatriarch patriarch2 = sheet2.createDrawingPatriarch(); 40 for (int i = 0; i < 3; i++) { 41 // anchor主要用于设置图片的属性 42 HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 1023, 250, (short) 1, 1+i*10, (short) 5, 8+i*10); 43 // 插入图片 44 patriarch2.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); 45 } 46 fileOut = new FileOutputStream("Excel.xls"); 47 // 写入excel文件 48 wb.write(fileOut); 49 System.out.println("----Excle文件已生成------"); 50 } catch (Exception e) { 51 e.printStackTrace(); 52 } finally { 53 if (fileOut != null) { 54 try { 55 fileOut.close(); 56 } catch (IOException e) { 57 e.printStackTrace(); 58 } 59 } 60 } 61 } 62 // 关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数,有必要在这里说明一下: 63 // dx1:起始单元格的x偏移量, 64 // dy1:起始单元格的y偏移量, 65 // dx2:终止单元格的x偏移量, 66 // dy2:终止单元格的y偏移量, 67 // col1:起始单元格列序号,从0开始计算; 68 // row1:起始单元格行序号,从0开始计算, 69 // col2:终止单元格列序号,从0开始计算; 70 // row2:终止单元格行序号,从0开始计算, 71 //添加多个图片时:多个pic应该share同一个DrawingPatriarch在同一个sheet里面。 72 }
顺便提一下图片base64形式怎么转为图片
1 String u = "Base64"; 2 // Base64解码 3 byte[] b = new BASE64Decoder().decodeBuffer(u); 4 // 生成图片 5 String imgName = "echartsPhoto"; 6 String filePath = ServletActionContext.getServletContext().getRealPath("/") + "echarts"; 7 String fileName = filePath +"/"+ imgName +".png"; 8 11 File file = new File(filePath); 12 if(!file.exists()){ 13 file.mkdir(); 14 } 15 OutputStream out = new FileOutputStream(new File(fileName)); 16 out.write(b);18 out.close();