diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 135bb70d5..f79a1c7bc 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + Add getMimeType() method to HSSF/XSSF PictureData, alongside existing file extension 49887 - allow sheet names longer than 31 chars in XSSF, enforce name uniqueness on the first 31 chars 49878 - improved API for hiding sheets 49875 - fixed XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with a single quote (') diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPictureData.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPictureData.java index 8ee201030..158d98c36 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPictureData.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPictureData.java @@ -81,10 +81,8 @@ public class HSSFPictureData implements PictureData * @see #getFormat * @return 'wmf', 'jpeg' etc depending on the format. never null */ - 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"; + } + } } - diff --git a/src/java/org/apache/poi/ss/usermodel/PictureData.java b/src/java/org/apache/poi/ss/usermodel/PictureData.java index a799de88e..954337829 100644 --- a/src/java/org/apache/poi/ss/usermodel/PictureData.java +++ b/src/java/org/apache/poi/ss/usermodel/PictureData.java @@ -33,4 +33,8 @@ public interface PictureData { */ String suggestFileExtension(); + /** + * Returns the mime type for the image + */ + String getMimeType(); } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java index 0454d9085..814ef7335 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java @@ -120,4 +120,8 @@ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData { } return 0; } + + public String getMimeType() { + return getPackagePart().getContentType(); + } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPictureData.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPictureData.java index 06868d837..55677e565 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPictureData.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPictureData.java @@ -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(); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java index eb7d12ebf..e351e2669 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java @@ -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 }