Add getMimeType() method to HSSF/XSSF PictureData, alongside existing file extension

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@995360 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2010-09-09 09:28:04 +00:00
parent 05593e6902
commit fc1980e939
6 changed files with 37 additions and 5 deletions

View File

@ -34,6 +34,7 @@
<changes>
<release version="3.7-beta3" date="2010-??-??">
<action dev="poi-developers" type="add">Add getMimeType() method to HSSF/XSSF PictureData, alongside existing file extension</action>
<action dev="poi-developers" type="fix">49887 - allow sheet names longer than 31 chars in XSSF, enforce name uniqueness on the first 31 chars</action>
<action dev="poi-developers" type="fix">49878 - improved API for hiding sheets</action>
<action dev="poi-developers" type="fix">49875 - fixed XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with a single quote (')</action>

View File

@ -81,10 +81,8 @@ public class HSSFPictureData implements PictureData
* @see #getFormat
* @return 'wmf', 'jpeg' etc depending on the format. never <code>null</code>
*/
public String suggestFileExtension()
{
switch (blip.getRecordId())
{
public String suggestFileExtension() {
switch (blip.getRecordId()) {
case EscherMetafileBlip.RECORD_ID_WMF:
return "wmf";
case EscherMetafileBlip.RECORD_ID_EMF:
@ -101,5 +99,26 @@ public class HSSFPictureData implements PictureData
return "";
}
}
}
/**
* Returns the mime type for the image
*/
public String getMimeType() {
switch (blip.getRecordId()) {
case EscherMetafileBlip.RECORD_ID_WMF:
return "application/x-wmf";
case EscherMetafileBlip.RECORD_ID_EMF:
return "application/x-emf";
case EscherMetafileBlip.RECORD_ID_PICT:
return "image/x-pict";
case EscherBitmapBlip.RECORD_ID_PNG:
return "image/png";
case EscherBitmapBlip.RECORD_ID_JPEG:
return "image/jpeg";
case EscherBitmapBlip.RECORD_ID_DIB:
return "image/bmp";
default:
return "image/unknown";
}
}
}

View File

@ -33,4 +33,8 @@ public interface PictureData {
*/
String suggestFileExtension();
/**
* Returns the mime type for the image
*/
String getMimeType();
}

View File

@ -120,4 +120,8 @@ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData {
}
return 0;
}
public String getMimeType() {
return getPackagePart().getContentType();
}
}

View File

@ -36,8 +36,10 @@ public final class TestXSSFPictureData extends TestCase {
assertEquals(5, pictures.size());
String[] ext = {"jpeg", "emf", "png", "emf", "wmf"};
String[] mimetype = {"image/jpeg", "image/x-emf", "image/png", "image/x-emf", "image/x-wmf"};
for (int i = 0; i < pictures.size(); i++) {
assertEquals(ext[i], pictures.get(i).suggestFileExtension());
assertEquals(mimetype[i], pictures.get(i).getMimeType());
}
int num = pictures.size();

View File

@ -57,6 +57,7 @@ public final class TestHSSFPictureData extends TestCase{
assertEquals(192, jpg.getWidth());
assertEquals(176, jpg.getHeight());
assertEquals(HSSFWorkbook.PICTURE_TYPE_JPEG, pict.getFormat());
assertEquals("image/jpeg", pict.getMimeType());
} else if (ext.equals("png")){
//try to read image data using javax.imageio.* (JDK 1.4+)
BufferedImage png = ImageIO.read(new ByteArrayInputStream(data));
@ -64,6 +65,7 @@ public final class TestHSSFPictureData extends TestCase{
assertEquals(300, png.getWidth());
assertEquals(300, png.getHeight());
assertEquals(HSSFWorkbook.PICTURE_TYPE_PNG, pict.getFormat());
assertEquals("image/png", pict.getMimeType());
} else {
//TODO: test code for PICT, WMF and EMF
}