Patch from Josh Holthaus from bug #53165 - HWPF support for fetching the description (alt text) of a picture
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1332594 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8a13b1bf04
commit
0ac6f0fd5a
@ -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>
|
||||
|
@ -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
|
||||
@ -489,6 +494,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
|
||||
* popular image formats to first bytes of picture's contents
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
BIN
test-data/document/Picture_Alternative_Text.doc
Normal file
BIN
test-data/document/Picture_Alternative_Text.doc
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user