//从03格式excel中获取图片
private static void getSheetPictures03(File userUploadFile ) throws InvalidFormatException, IOException {
//创建Workbook
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(userUploadFile));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
List pictures = wb.getAllPictures();
System.out.println("图片数量:"+pictures.size());
if (pictures.size() != 0) {
for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) {
HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();
if (shape instanceof HSSFPicture) {
HSSFPicture pic = (HSSFPicture) shape;
System.out.println("第几列:"+anchor.getCol1());
System.out.println("第几行:"+anchor.getRow1());
System.out.println(pic.getPictureData().suggestFileExtension());
System.out.println(pic.getPictureData().getMimeType());
InputStream inputStream = new ByteArrayInputStream(pic.getPictureData().getData());
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//创建一个Buffer字符串
byte[] buffer = new byte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
int len = 0;
//使用一个输入流从buffer里把数据读取出来
while( (len=inputStream.read(buffer)) != -1 ){
//用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
outStream.write(buffer, 0, len);
}
//关闭输入流
inputStream.close();
//把outStream里的数据写入内存
//得到图片的二进制数据,以二进制封装得到数据,具有通用性
byte[] data = outStream.toByteArray();
//new一个文件对象用来保存图片,默认保存当前工程根目录
File imageFile = new File("E:/BeautyGirl.jpg");
//创建输出流
FileOutputStream fileOutStream = new FileOutputStream(imageFile);
//写入数据
fileOutStream .write(data);
fileOutStream.close();
//.suggestFileExtension() 输出 jpeg
//getMimeType() 输出 image/jpeg
//positionEntity.setSheetNum(sheetNum);
//positionEntity.setColumn((int) anchor.getCol1());
//positionEntity.setRow(anchor.getRow1());
//positionEntity.setPictureData(pic.getPictureData());
}
}
}
}
/**
* 获取图片和位置 (xlsx) 不是03格式
* @return
* @throws IOException
*/
public static Map<String, PictureData> getPictures2(MultipartFile file ) throws IOException {
InputStream fs = file.getInputStream();
XSSFWorkbook wb = new XSSFWorkbook(fs);
XSSFSheet sheet1 = wb.getSheetAt(0);
Map<String, PictureData> map = new HashMap<String, PictureData>();
List<POIXMLDocumentPart> list = sheet1.getRelations();
for (POIXMLDocumentPart part : list) {
if (part instanceof XSSFDrawing) {
XSSFDrawing drawing = (XSSFDrawing) part;
List<XSSFShape> shapes = drawing.getShapes();
for (XSSFShape shape : shapes) {
XSSFPicture picture = (XSSFPicture) shape;
XSSFClientAnchor anchor = picture.getPreferredSize();
CTMarker marker = anchor.getFrom();
int rowNum = marker.getRow();
int colNum = marker.getCol();
String key = marker.getRow() + "";
// String key = marker.getRow() + "-" + marker.getCol();
System.out.println("行是:"+rowNum+"列是:"+colNum);
if(colNum==1){
if(picture.getPictureData().getData().length<120*1024){
map.put(key, picture.getPictureData());
}else{
// 主图大小不符合要求
System.out.println(String.format("{}行{}列主图大小不符合要求",rowNum,colNum));
}
map.put(key, picture.getPictureData());
}
}
}
}
return map;
}站长微信:xiaomao0055
站长QQ:14496453