]> source.dussan.org Git - poi.git/commitdiff
Patch from Josh Holthaus from bug #53165 - HWPF support for fetching the description...
authorNick Burch <nick@apache.org>
Tue, 1 May 2012 09:46:15 +0000 (09:46 +0000)
committerNick Burch <nick@apache.org>
Tue, 1 May 2012 09:46:15 +0000 (09:46 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1332594 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/scratchpad/src/org/apache/poi/hwpf/usermodel/Picture.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestPictures.java
test-data/document/Picture_Alternative_Text.doc [new file with mode: 0644]

index 17c2490dfed45dd36db0b255b0167c272a86c08d..7b085461f697127eeabc59c72ec85bff08e200e3 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.9-beta1" date="2012-??-??">
+          <action dev="poi-developers" type="add">53165 - HWPF support for fetching the description (alt text) of a picture</action>
           <action dev="poi-developers" type="fix">48528 - support negative arguments to the DATE() function</action>
           <action dev="poi-developers" type="fix">53092 - allow specifying of a TimeZone to DateUtil.getJavaDate(), for when it is known that a file comes from a different (known) timezone to the current machine</action>
           <action dev="poi-developers" type="fix">53043 - don't duplicate hyperlink relationships when saving XSSF file</action>
index 58ad7aefa17a2d676b4d7fbb293827f0b6db54e1..ff7af7cf21fa64c7354c2627b57103c9a750155c 100644 (file)
@@ -27,11 +27,16 @@ import java.util.zip.InflaterInputStream;
 
 import org.apache.poi.ddf.EscherBSERecord;
 import org.apache.poi.ddf.EscherBlipRecord;
+import org.apache.poi.ddf.EscherComplexProperty;
+import org.apache.poi.ddf.EscherOptRecord;
+import org.apache.poi.ddf.EscherProperties;
+import org.apache.poi.ddf.EscherProperty;
 import org.apache.poi.ddf.EscherRecord;
 import org.apache.poi.hwpf.model.PICF;
 import org.apache.poi.hwpf.model.PICFAndOfficeArtData;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
+import org.apache.poi.util.StringUtil;
 
 /**
  * Represents embedded picture extracted from Word Document
@@ -488,6 +493,28 @@ public final class Picture
         }
         return width;
     }
+    
+    /**
+     * returns the description stored in the alternative text
+     * 
+     * @return pictue description
+     */
+    public String getDescription()
+    {
+       for(EscherRecord escherRecord : _picfAndOfficeArtData.getShape().getChildRecords()){
+          if(escherRecord instanceof EscherOptRecord){
+             EscherOptRecord escherOptRecord = (EscherOptRecord) escherRecord;
+             for(EscherProperty property : escherOptRecord.getEscherProperties()){
+                if(EscherProperties.GROUPSHAPE__DESCRIPTION == property.getPropertyNumber()){
+                   byte[] complexData = ((EscherComplexProperty)property).getComplexData();
+                   return StringUtil.getFromUnicodeLE(complexData,0,complexData.length/2-1);
+                }
+             }
+          }
+       }
+
+       return null;
+    }
 
     /**
      * tries to suggest extension for picture's file by matching signatures of
index c2d4093fdfc424b42d14acc6c6867e8b78f2fb0d..cddaee7e439ebe0c0f6d26588ed5b419c96d8d34 100644 (file)
@@ -333,4 +333,12 @@ public final class TestPictures extends TestCase {
         assertEquals(PictureType.PNG, p.suggestPictureType());
         assertEquals("png", p.suggestFileExtension());
     }
+    
+    public void testPictureWithAlternativeText() throws Exception {
+        HWPFDocument document = HWPFTestDataSamples.openSampleFile("Picture_Alternative_Text.doc");
+        PicturesTable pictureTable = document.getPicturesTable();
+        Picture picture = pictureTable.getAllPictures().get(0);
+
+        assertEquals("This is the alternative text for the picture.", picture.getDescription());
+    }
 }
diff --git a/test-data/document/Picture_Alternative_Text.doc b/test-data/document/Picture_Alternative_Text.doc
new file mode 100644 (file)
index 0000000..55bf875
Binary files /dev/null and b/test-data/document/Picture_Alternative_Text.doc differ