是否可以提取使用Apache POI的XLS表格图像的信息?
在我的一个项目,我需要从一个.xls文件看了一些图片。 我可以读取所有图像在一起,但我怎么能得到图像位置(像列和行号或坐标)? 否则,我可以得到图像的位置,但我不知道的信息,如图片名称或分机或其他人,约在发现的位置特定图像。 我怎样才能获得的图像和位置吗?
在这里阅读所有图片...在这里得到图像中的位置?
是否可以提取使用Apache POI的XLS表格图像的信息?
在我的一个项目,我需要从一个.xls文件看了一些图片。 我可以读取所有图像在一起,但我怎么能得到图像位置(像列和行号或坐标)? 否则,我可以得到图像的位置,但我不知道的信息,如图片名称或分机或其他人,约在发现的位置特定图像。 我怎样才能获得的图像和位置吗?
在这里阅读所有图片...在这里得到图像中的位置?
看看这里:
http://poi.apache.org/components/spreadsheet/quick-guide.html#Images
样品:
List lst = workbook.getAllPictures();
for (Iterator it = lst.iterator(); it.hasNext(); ) {
PictureData pict = (PictureData)it.next();
String ext = pict.suggestFileExtension();
byte[] data = pict.getData();
if (ext.equals("jpeg")) {
FileOutputStream out = new FileOutputStream("pict.jpg");
out.write(data);
out.close();
}
}
在此之后,您可以像使用的imageinfo工具延伸Magick找出各种CONFIGS。 哟,甚至可以将图像转换到不同的尺寸。
看看这个类还有:
http://blog.jaimon.co.uk/simpleimageinfo/SimpleImageInfo.java.html
- 希望这可以帮助
我希望这个代码将帮助)
XSSFDrawing dp = workbook.getSheetAt(1).createDrawingPatriarch();
List<XSSFShape> pics = dp.getShapes();
XSSFPicture inpPic = (XSSFPicture)pics.get(0);
XSSFClientAnchor clientAnchor = inpPic.getClientAnchor();
inpPic.getShapeName(); // узнаю название картинки
PictureData pict = inpPic.getPictureData();
FileOutputStream out = new FileOutputStream("pict.jpg");
byte[] data = pict.getData();
out.write(data);
out.close();
System.out.println("col1: " + clientAnchor.getCol1() + ", col2: " + clientAnchor.getCol2() + ", row1: " + clientAnchor.getRow1() + ", row2: " + clientAnchor.getRow2());
System.out.println("x1: " + clientAnchor.getDx1() + ", x2: " + clientAnchor.getDx2() + ", y1: " + clientAnchor.getDy1() + ", y2: " + clientAnchor.getDy2());
如果你不`吨要使用迭代器(导致一些时候,他们是沉重的)
public List readDrawing(Workbook workbook) throws Exception {
List list = workbook.getAllPictures();
for (int i=0; i<list.size(); i++) {
PictureData picture = (PictureData) list.get(i);
String ext = picture.suggestFileExtension();
byte[] data = picture.getData();
FileOutputStream out = new FileOutputStream("imageName" + "." + ext);
out.write(data);
out.close();
}
return list;
}