mirror of https://github.com/apache/poi.git
fix bug #44296: HSLF Not Extracting Slide Background Image
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@615315 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
62a38a7ce7
commit
98530c4c2c
|
@ -36,6 +36,7 @@
|
||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.0.2-FINAL" date="2008-??-??">
|
<release version="3.0.2-FINAL" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44296 - Fix for reading slide background images</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
|
<action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
|
<action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
|
<action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.0.2-FINAL" date="2008-??-??">
|
<release version="3.0.2-FINAL" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44296 - Fix for reading slide background images</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
|
<action dev="POI-DEVELOPERS" type="fix">44293 - Avoid swapping AreaPtgs from relative to absolute</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
|
<action dev="POI-DEVELOPERS" type="fix">44292 - Correctly process the last paragraph in a word file</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
|
<action dev="POI-DEVELOPERS" type="fix">44254 - Avoid some unread byte warnings, and properly understand DVALRecord</action>
|
||||||
|
|
|
@ -23,6 +23,8 @@ import org.apache.poi.hslf.record.*;
|
||||||
import org.apache.poi.hslf.usermodel.PictureData;
|
import org.apache.poi.hslf.usermodel.PictureData;
|
||||||
import org.apache.poi.hslf.usermodel.SlideShow;
|
import org.apache.poi.hslf.usermodel.SlideShow;
|
||||||
import org.apache.poi.hslf.exceptions.HSLFException;
|
import org.apache.poi.hslf.exceptions.HSLFException;
|
||||||
|
import org.apache.poi.util.POILogger;
|
||||||
|
import org.apache.poi.util.POILogFactory;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
@ -33,6 +35,9 @@ import java.util.*;
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public class Fill {
|
public class Fill {
|
||||||
|
// For logging
|
||||||
|
protected POILogger logger = POILogFactory.getLogger(this.getClass());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill with a solid color
|
* Fill with a solid color
|
||||||
*/
|
*/
|
||||||
|
@ -208,15 +213,18 @@ public class Fill {
|
||||||
|
|
||||||
java.util.List lst = bstore.getChildRecords();
|
java.util.List lst = bstore.getChildRecords();
|
||||||
int idx = p.getPropertyValue();
|
int idx = p.getPropertyValue();
|
||||||
EscherBSERecord bse = (EscherBSERecord)lst.get(idx);
|
if (idx == 0){
|
||||||
for ( int i = 0; i < pict.length; i++ ) {
|
logger.log(POILogger.ERROR, "no reference to picture data found ");
|
||||||
if (pict[i].getOffset() == bse.getOffset()){
|
} else {
|
||||||
return pict[i];
|
EscherBSERecord bse = (EscherBSERecord)lst.get(idx - 1);
|
||||||
|
for ( int i = 0; i < pict.length; i++ ) {
|
||||||
|
if (pict[i].getOffset() == bse.getOffset()){
|
||||||
|
return pict[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw new HSLFException("Picture data not found: \n" +
|
|
||||||
" bse: " + bse + " at " + bse.getOffset() );
|
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class Picture extends SimpleShape {
|
||||||
*/
|
*/
|
||||||
public int getPictureIndex(){
|
public int getPictureIndex(){
|
||||||
EscherOptRecord opt = (EscherOptRecord)getEscherChild(_escherContainer, EscherOptRecord.RECORD_ID);
|
EscherOptRecord opt = (EscherOptRecord)getEscherChild(_escherContainer, EscherOptRecord.RECORD_ID);
|
||||||
EscherSimpleProperty prop = (EscherSimpleProperty)getEscherProperty(opt, EscherProperties.BLIP__BLIPTODISPLAY + 0x4000);
|
EscherSimpleProperty prop = (EscherSimpleProperty)getEscherProperty(opt, EscherProperties.BLIP__BLIPTODISPLAY);
|
||||||
return prop == null ? 0 : prop.getPropertyValue();
|
return prop == null ? 0 : prop.getPropertyValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -227,7 +227,7 @@ public abstract class Shape {
|
||||||
for ( Iterator iterator = opt.getEscherProperties().iterator(); iterator.hasNext(); )
|
for ( Iterator iterator = opt.getEscherProperties().iterator(); iterator.hasNext(); )
|
||||||
{
|
{
|
||||||
EscherProperty prop = (EscherProperty) iterator.next();
|
EscherProperty prop = (EscherProperty) iterator.next();
|
||||||
if (prop.getId() == propId)
|
if (prop.getPropertyNumber() == propId)
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -262,4 +262,11 @@ public class Slide extends Sheet
|
||||||
SlideAtom sa = getSlideRecord().getSlideAtom();
|
SlideAtom sa = getSlideRecord().getSlideAtom();
|
||||||
return sa.getFollowMasterBackground();
|
return sa.getFollowMasterBackground();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Background getBackground() {
|
||||||
|
if(getFollowMasterBackground())
|
||||||
|
return getMasterSheet().getBackground();
|
||||||
|
else
|
||||||
|
return super.getBackground();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -330,4 +330,24 @@ public class TestBugs extends TestCase {
|
||||||
assertEquals(tr1[i].getText(), tr2[i].getText());
|
assertEquals(tr1[i].getText(), tr2[i].getText());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bug 44296: HSLF Not Extracting Slide Background Image
|
||||||
|
*/
|
||||||
|
public void test44296 () throws Exception {
|
||||||
|
FileInputStream is = new FileInputStream(new File(cwd, "44296.ppt"));
|
||||||
|
SlideShow ppt = new SlideShow(is);
|
||||||
|
is.close();
|
||||||
|
|
||||||
|
Slide slide = ppt.getSlides()[0];
|
||||||
|
|
||||||
|
Background b = slide.getBackground();
|
||||||
|
Fill f = b.getFill();
|
||||||
|
assertEquals(Fill.FILL_PICTURE, f.getFillType());
|
||||||
|
|
||||||
|
PictureData pict = f.getPictureData();
|
||||||
|
assertNotNull(pict);
|
||||||
|
assertEquals(Picture.JPEG, pict.getType());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue