git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@480104 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_0_ALPHA3
@@ -19,6 +19,7 @@ | |||
<li><link href="#Shapes">Drawing a shape on a slide</link></li> | |||
<li><link href="#Pictures">How to work with pictures</link></li> | |||
<li><link href="#SlideTitle">How to set slide title</link></li> | |||
<li><link href="#Fill">How to work with slide/shape background</link></li> | |||
</ul> | |||
</section> | |||
<section><title>Features</title> | |||
@@ -252,6 +253,47 @@ | |||
myDocument.Shapes.AddTitle.TextFrame.TextRange.Text = "Hello, World!" | |||
</source> | |||
</section> | |||
<anchor id="Fill"/> | |||
<section><title>How to modify background of a slide master</title> | |||
<source> | |||
SlideShow ppt = new SlideShow(); | |||
SlideMaster master = ppt.getSlidesMasters()[0]; | |||
Fill fill = master.getBackground().getFill(); | |||
int idx = ppt.addPicture(new File("background.png"), Picture.PNG); | |||
fill.setFillType(Fill.FILL_PICTURE); | |||
fill.setPictureData(idx); | |||
</source> | |||
</section> | |||
<section><title>How to modify background of a slide</title> | |||
<source> | |||
SlideShow ppt = new SlideShow(); | |||
Slide slide = ppt.createSlide(); | |||
//This slide has its own background. | |||
//Without this line it will use master's background. | |||
slide.setFollowMasterBackground(false); | |||
Fill fill = slide.getBackground().getFill(); | |||
int idx = ppt.addPicture(new File("background.png"), Picture.PNG); | |||
fill.setFillType(Fill.FILL_PATTERN); | |||
fill.setPictureData(idx); | |||
</source> | |||
</section> | |||
<section><title>How to modify background of a shape</title> | |||
<source> | |||
SlideShow ppt = new SlideShow(); | |||
Slide slide = ppt.createSlide(); | |||
Shape shape = new AutoShape(ShapeTypes.Rectangle); | |||
shape.setAnchor(new java.awt.Rectangle(100, 100, 200, 200)); | |||
Fill fill = shape.getFill(); | |||
fill.setFillType(Fill.FILL_SHADE); | |||
fill.setBackgroundColor(Color.red); | |||
fill.setForegroundColor(Color.green); | |||
slide.addShape(shape); | |||
</source> | |||
</section> | |||
</section> | |||
</section> |
@@ -0,0 +1,37 @@ | |||
/* ==================================================================== | |||
Copyright 2002-2004 Apache Software Foundation | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
==================================================================== */ | |||
package org.apache.poi.hslf.model; | |||
import org.apache.poi.ddf.EscherContainerRecord; | |||
/** | |||
* Background shape | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class Background extends Shape { | |||
protected Background(EscherContainerRecord escherRecord, Shape parent){ | |||
super(escherRecord, parent); | |||
} | |||
protected EscherContainerRecord createSpContainer(boolean isChild){ | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,228 @@ | |||
/* ==================================================================== | |||
Copyright 2002-2004 Apache Software Foundation | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
==================================================================== */ | |||
package org.apache.poi.hslf.model; | |||
import org.apache.poi.ddf.*; | |||
import org.apache.poi.hslf.record.*; | |||
import org.apache.poi.hslf.usermodel.PictureData; | |||
import org.apache.poi.hslf.usermodel.SlideShow; | |||
import java.awt.*; | |||
import java.util.*; | |||
/** | |||
* Represents functionality provided by the 'Fill Effects' dialog in PowerPoint. | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class Fill { | |||
/** | |||
* Fill with a solid color | |||
*/ | |||
public static final int FILL_SOLID = 0; | |||
/** | |||
* Fill with a pattern (bitmap) | |||
*/ | |||
public static final int FILL_PATTERN = 1; | |||
/** | |||
* A texture (pattern with its own color map) | |||
*/ | |||
public static final int FILL_TEXTURE = 2; | |||
/** | |||
* Center a picture in the shape | |||
*/ | |||
public static final int FILL_PICTURE = 3; | |||
/** | |||
* Shade from start to end points | |||
*/ | |||
public static final int FILL_SHADE = 4; | |||
/** | |||
* Shade from bounding rectangle to end point | |||
*/ | |||
public static final int FILL_SHADE_CENTER = 5; | |||
/** | |||
* Shade from shape outline to end point | |||
*/ | |||
public static final int FILL_SHADE_SHAPE = 6; | |||
/** | |||
* Similar to FILL_SHADE, but the fill angle | |||
* is additionally scaled by the aspect ratio of | |||
* the shape. If shape is square, it is the same as FILL_SHADE | |||
*/ | |||
public static final int FILL_SHADE_SCALE = 7; | |||
/** | |||
* shade to title | |||
*/ | |||
public static final int FILL_SHADE_TITLE = 8; | |||
/** | |||
* Use the background fill color/pattern | |||
*/ | |||
public static final int FILL_BACKGROUND = 9; | |||
/** | |||
* The shape this background applies to | |||
*/ | |||
protected Shape shape; | |||
/** | |||
* Construct a <code>Fill</code> object for a shape. | |||
* Fill information will be read from shape's escher properties. | |||
* | |||
* @param shape the shape this background applies to | |||
*/ | |||
public Fill(Shape shape){ | |||
this.shape = shape; | |||
} | |||
/** | |||
* Returns fill type. | |||
* Must be one of the <code>FILL_*</code> constants defined in this class. | |||
* | |||
* @return type of fill | |||
*/ | |||
public int getFillType(){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
EscherSimpleProperty prop = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__FILLTYPE); | |||
return prop == null ? FILL_SOLID : prop.getPropertyValue(); | |||
} | |||
/** | |||
* Sets fill type. | |||
* Must be one of the <code>FILL_*</code> constants defined in this class. | |||
* | |||
* @param type type of the fill | |||
*/ | |||
public void setFillType(int type){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
Shape.setEscherProperty(opt, EscherProperties.FILL__FILLTYPE, type); | |||
} | |||
/** | |||
* Foreground color | |||
*/ | |||
public Color getForegroundColor(){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
EscherSimpleProperty p1 = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__FILLCOLOR); | |||
EscherSimpleProperty p2 = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__NOFILLHITTEST); | |||
int p2val = p2 == null ? 0 : p2.getPropertyValue(); | |||
Color clr = null; | |||
if (p1 != null && (p2val & 0x10) != 0){ | |||
int rgb = p1.getPropertyValue(); | |||
clr = shape.getColor(rgb); | |||
} | |||
return clr; | |||
} | |||
/** | |||
* Foreground color | |||
*/ | |||
public void setForegroundColor(Color color){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
if (color == null) { | |||
Shape.setEscherProperty(opt, EscherProperties.FILL__FILLCOLOR, -1); | |||
} | |||
else { | |||
int rgb = new Color(color.getBlue(), color.getGreen(), color.getRed(), 0).getRGB(); | |||
Shape.setEscherProperty(opt, EscherProperties.FILL__FILLCOLOR, rgb); | |||
} | |||
} | |||
/** | |||
* Background color | |||
*/ | |||
public Color getBackgroundColor(){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
EscherSimpleProperty p1 = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__FILLBACKCOLOR); | |||
EscherSimpleProperty p2 = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__NOFILLHITTEST); | |||
int p2val = p2 == null ? 0 : p2.getPropertyValue(); | |||
Color clr = null; | |||
if (p1 != null && (p2val & 0x10) != 0){ | |||
int rgb = p1.getPropertyValue(); | |||
clr = shape.getColor(rgb); | |||
} | |||
return clr; | |||
} | |||
/** | |||
* Background color | |||
*/ | |||
public void setBackgroundColor(Color color){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
if (color == null) { | |||
Shape.setEscherProperty(opt, EscherProperties.FILL__FILLBACKCOLOR, -1); | |||
} | |||
else { | |||
int rgb = new Color(color.getBlue(), color.getGreen(), color.getRed(), 0).getRGB(); | |||
Shape.setEscherProperty(opt, EscherProperties.FILL__FILLBACKCOLOR, rgb); | |||
} | |||
} | |||
/** | |||
* <code>PictureData</code> object used in a texture, pattern of picture fill. | |||
*/ | |||
public PictureData getPictureData(){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
EscherSimpleProperty p = (EscherSimpleProperty)Shape.getEscherProperty(opt, EscherProperties.FILL__PATTERNTEXTURE); | |||
if (p == null) return null; | |||
SlideShow ppt = shape.getSheet().getSlideShow(); | |||
PictureData[] pict = ppt.getPictureData(); | |||
Document doc = ppt.getDocumentRecord(); | |||
EscherContainerRecord dggContainer = doc.getPPDrawingGroup().getDggContainer(); | |||
EscherContainerRecord bstore = (EscherContainerRecord)Shape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER); | |||
java.util.List lst = bstore.getChildRecords(); | |||
int idx = p.getPropertyValue(); | |||
EscherBSERecord bse = (EscherBSERecord)lst.get(idx); | |||
for ( int i = 0; i < pict.length; i++ ) { | |||
if (pict[i].getOffset() == bse.getOffset()){ | |||
return pict[i]; | |||
} | |||
} | |||
throw new RuntimeException("Picture data not found: \n" + | |||
" bse: " + bse + " at " + bse.getOffset() ); | |||
} | |||
/** | |||
* Assign picture used to fill the underlying shape. | |||
* | |||
* @param idx 0-based index of the picture added to this ppt by <code>SlideShow.addPicture</code> method. | |||
*/ | |||
public void setPictureData(int idx){ | |||
EscherOptRecord opt = (EscherOptRecord)Shape.getEscherChild(shape.getSpContainer(), EscherOptRecord.RECORD_ID); | |||
Shape.setEscherProperty(opt, (short)(EscherProperties.FILL__PATTERNTEXTURE + 0x4000), idx); | |||
} | |||
} |
@@ -17,7 +17,10 @@ package org.apache.poi.hslf.model; | |||
import org.apache.poi.ddf.*; | |||
import org.apache.poi.hslf.model.ShapeTypes; | |||
import org.apache.poi.hslf.record.ColorSchemeAtom; | |||
import java.util.Iterator; | |||
import java.awt.*; | |||
/** | |||
* <p> | |||
@@ -282,4 +285,23 @@ public abstract class Shape { | |||
_sheet = sheet; | |||
} | |||
protected Color getColor(int rgb){ | |||
if (rgb >= 0x8000000) { | |||
int idx = rgb - 0x8000000; | |||
ColorSchemeAtom ca = getSheet().getColorScheme(); | |||
if(idx >= 0 && idx <= 7) rgb = ca.getColor(idx); | |||
} | |||
Color tmp = new Color(rgb, true); | |||
return new Color(tmp.getBlue(), tmp.getGreen(), tmp.getRed()); | |||
} | |||
/** | |||
* Fill properties of this shape | |||
* | |||
* @return fill properties of this shape | |||
*/ | |||
public Fill getFill(){ | |||
return new Fill(this); | |||
} | |||
} |
@@ -20,12 +20,17 @@ | |||
package org.apache.poi.hslf.model; | |||
import java.util.Vector; | |||
import java.util.List; | |||
import java.util.Iterator; | |||
import java.util.ArrayList; | |||
import org.apache.poi.hslf.record.PPDrawing; | |||
import org.apache.poi.hslf.record.SlideAtom; | |||
import org.apache.poi.hslf.record.TextHeaderAtom; | |||
import org.apache.poi.hslf.record.ColorSchemeAtom; | |||
import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; | |||
import org.apache.poi.ddf.EscherContainerRecord; | |||
import org.apache.poi.ddf.EscherRecord; | |||
/** | |||
* This class represents a slide in a PowerPoint Document. It allows | |||
@@ -33,6 +38,7 @@ import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; | |||
* the text side of things though | |||
* | |||
* @author Nick Burch | |||
* @author Yegor Kozlov | |||
*/ | |||
public class Slide extends Sheet | |||
@@ -45,6 +51,7 @@ public class Slide extends Sheet | |||
private TextRun[] _runs; | |||
private TextRun[] _otherRuns; // Any from the PPDrawing, shouldn't really be any though | |||
private Notes _notes; // usermodel needs to set this | |||
private Background _background; | |||
/** | |||
* Constructs a Slide from the Slide record, and the SlideAtomsSet | |||
@@ -245,4 +252,51 @@ public class Slide extends Sheet | |||
return _slide.getColorScheme(); | |||
} | |||
/** | |||
* Returns the background shape for this sheet. | |||
* | |||
* @return the background shape for this sheet. | |||
*/ | |||
public Background getBackground(){ | |||
if (_background == null){ | |||
PPDrawing ppdrawing = getPPDrawing(); | |||
EscherContainerRecord dg = (EscherContainerRecord)ppdrawing.getEscherRecords()[0]; | |||
EscherContainerRecord spContainer = null; | |||
List ch = dg.getChildRecords(); | |||
for (Iterator it = ch.iterator(); it.hasNext();) { | |||
EscherRecord rec = (EscherRecord)it.next(); | |||
if (rec.getRecordId() == EscherContainerRecord.SP_CONTAINER){ | |||
spContainer = (EscherContainerRecord)rec; | |||
break; | |||
} | |||
} | |||
_background = new Background(spContainer, null); | |||
_background.setSheet(this); | |||
} | |||
return _background; | |||
} | |||
/** | |||
* Sets whether this slide follows master background | |||
* | |||
* @param flag <code>true</code> if the slide follows master, | |||
* <code>false</code> otherwise | |||
*/ | |||
public void setFollowMasterBackground(boolean flag){ | |||
SlideAtom sa = _slide.getSlideAtom(); | |||
sa.setFollowMasterBackground(flag); | |||
} | |||
/** | |||
* Whether this slide follows master sheet background | |||
* | |||
* @return <code>true</code> if the slide follows master background, | |||
* <code>false</code> otherwise | |||
*/ | |||
public boolean getFollowMasterBackground(){ | |||
SlideAtom sa = _slide.getSlideAtom(); | |||
return sa.getFollowMasterBackground(); | |||
} | |||
} |
@@ -19,6 +19,11 @@ package org.apache.poi.hslf.model; | |||
import org.apache.poi.hslf.record.*; | |||
import org.apache.poi.hslf.usermodel.SlideShow; | |||
import org.apache.poi.hslf.record.StyleTextPropAtom.*; | |||
import org.apache.poi.ddf.EscherContainerRecord; | |||
import org.apache.poi.ddf.EscherRecord; | |||
import java.util.List; | |||
import java.util.Iterator; | |||
/** | |||
* SlideMaster determines the graphics, layout, and formatting for all the slides in a given presentation. | |||
@@ -32,6 +37,7 @@ public class SlideMaster extends MasterSheet { | |||
private int _sheetNo; | |||
private MainMaster _master; | |||
private TextRun[] _runs; | |||
private Background _background; | |||
/** | |||
* all TxMasterStyleAtoms available in this master | |||
@@ -143,4 +149,30 @@ public class SlideMaster extends MasterSheet { | |||
return _master.getColorScheme(); | |||
} | |||
/** | |||
* Returns the background shape for this sheet. | |||
* | |||
* @return the background shape for this sheet. | |||
*/ | |||
public Background getBackground(){ | |||
if (_background == null){ | |||
PPDrawing ppdrawing = getPPDrawing(); | |||
EscherContainerRecord dg = (EscherContainerRecord)ppdrawing.getEscherRecords()[0]; | |||
EscherContainerRecord spContainer = null; | |||
List ch = dg.getChildRecords(); | |||
for (Iterator it = ch.iterator(); it.hasNext();) { | |||
EscherRecord rec = (EscherRecord)it.next(); | |||
if (rec.getRecordId() == EscherContainerRecord.SP_CONTAINER){ | |||
spContainer = (EscherContainerRecord)rec; | |||
break; | |||
} | |||
} | |||
_background = new Background(spContainer, null); | |||
_background.setSheet(this); | |||
} | |||
return _background; | |||
} | |||
} |
@@ -0,0 +1,182 @@ | |||
/* ==================================================================== | |||
Copyright 2002-2004 Apache Software Foundation | |||
Licensed under the Apache License, Version 2.0 (the "License"); | |||
you may not use this file except in compliance with the License. | |||
You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
==================================================================== */ | |||
package org.apache.poi.hslf.model; | |||
import junit.framework.TestCase; | |||
import java.io.*; | |||
import java.awt.*; | |||
import org.apache.poi.hslf.usermodel.SlideShow; | |||
import org.apache.poi.hslf.HSLFSlideShow; | |||
/** | |||
* Test <code>Fill</code> object. | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class TestBackground extends TestCase { | |||
/** | |||
* Default background for slide, shape and slide master. | |||
*/ | |||
public void testDefaults() throws Exception { | |||
SlideShow ppt = new SlideShow(); | |||
assertEquals(Fill.FILL_SOLID, ppt.getSlidesMasters()[0].getBackground().getFill().getFillType()); | |||
Slide slide = ppt.createSlide(); | |||
assertTrue(slide.getFollowMasterBackground()); | |||
assertEquals(Fill.FILL_SOLID, slide.getBackground().getFill().getFillType()); | |||
Shape shape = new AutoShape(ShapeTypes.Rectangle); | |||
assertEquals(Fill.FILL_SOLID, shape.getFill().getFillType()); | |||
} | |||
/** | |||
* Read fill information from an reference ppt file | |||
*/ | |||
public void testReadBackground() throws Exception { | |||
SlideShow ppt = new SlideShow(new HSLFSlideShow(System.getProperty("HSLF.testdata.path") + "/backgrounds.ppt")); | |||
Fill fill; | |||
Shape shape; | |||
Slide[] slide = ppt.getSlides(); | |||
fill = slide[0].getBackground().getFill(); | |||
assertEquals(Fill.FILL_PICTURE, fill.getFillType()); | |||
shape = slide[0].getShapes()[0]; | |||
assertEquals(Fill.FILL_SOLID, shape.getFill().getFillType()); | |||
fill = slide[1].getBackground().getFill(); | |||
assertEquals(Fill.FILL_PATTERN, fill.getFillType()); | |||
shape = slide[1].getShapes()[0]; | |||
assertEquals(Fill.FILL_BACKGROUND, shape.getFill().getFillType()); | |||
fill = slide[2].getBackground().getFill(); | |||
assertEquals(Fill.FILL_TEXTURE, fill.getFillType()); | |||
shape = slide[2].getShapes()[0]; | |||
assertEquals(Fill.FILL_PICTURE, shape.getFill().getFillType()); | |||
fill = slide[3].getBackground().getFill(); | |||
assertEquals(Fill.FILL_SHADE_CENTER, fill.getFillType()); | |||
shape = slide[3].getShapes()[0]; | |||
assertEquals(Fill.FILL_SHADE, shape.getFill().getFillType()); | |||
} | |||
/** | |||
* Create a ppt with various fill effects | |||
*/ | |||
public void testBackgroundPicture() throws Exception { | |||
SlideShow ppt = new SlideShow(); | |||
Slide slide; | |||
Fill fill; | |||
Shape shape; | |||
int idx; | |||
//slide 1 | |||
slide = ppt.createSlide(); | |||
slide.setFollowMasterBackground(false); | |||
fill = slide.getBackground().getFill(); | |||
idx = ppt.addPicture(new File(System.getProperty("HSLF.testdata.path") + "/tomcat.png"), Picture.PNG); | |||
fill.setFillType(Fill.FILL_PICTURE); | |||
fill.setPictureData(idx); | |||
shape = new AutoShape(ShapeTypes.Rectangle); | |||
shape.setAnchor(new java.awt.Rectangle(100, 100, 200, 200)); | |||
fill = shape.getFill(); | |||
fill.setFillType(Fill.FILL_SOLID); | |||
slide.addShape(shape); | |||
//slide 2 | |||
slide = ppt.createSlide(); | |||
slide.setFollowMasterBackground(false); | |||
fill = slide.getBackground().getFill(); | |||
idx = ppt.addPicture(new File(System.getProperty("HSLF.testdata.path") + "/tomcat.png"), Picture.PNG); | |||
fill.setFillType(Fill.FILL_PATTERN); | |||
fill.setPictureData(idx); | |||
fill.setBackgroundColor(Color.green); | |||
fill.setForegroundColor(Color.red); | |||
shape = new AutoShape(ShapeTypes.Rectangle); | |||
shape.setAnchor(new java.awt.Rectangle(100, 100, 200, 200)); | |||
fill = shape.getFill(); | |||
fill.setFillType(Fill.FILL_BACKGROUND); | |||
slide.addShape(shape); | |||
//slide 3 | |||
slide = ppt.createSlide(); | |||
slide.setFollowMasterBackground(false); | |||
fill = slide.getBackground().getFill(); | |||
idx = ppt.addPicture(new File(System.getProperty("HSLF.testdata.path") + "/tomcat.png"), Picture.PNG); | |||
fill.setFillType(Fill.FILL_TEXTURE); | |||
fill.setPictureData(idx); | |||
shape = new AutoShape(ShapeTypes.Rectangle); | |||
shape.setAnchor(new java.awt.Rectangle(100, 100, 200, 200)); | |||
fill = shape.getFill(); | |||
fill.setFillType(Fill.FILL_PICTURE); | |||
idx = ppt.addPicture(new File(System.getProperty("HSLF.testdata.path") + "/clock.jpg"), Picture.JPEG); | |||
fill.setPictureData(idx); | |||
slide.addShape(shape); | |||
// slide 4 | |||
slide = ppt.createSlide(); | |||
slide.setFollowMasterBackground(false); | |||
fill = slide.getBackground().getFill(); | |||
fill.setFillType(Fill.FILL_SHADE_CENTER); | |||
fill.setBackgroundColor(Color.white); | |||
fill.setForegroundColor(Color.darkGray); | |||
shape = new AutoShape(ShapeTypes.Rectangle); | |||
shape.setAnchor(new java.awt.Rectangle(100, 100, 200, 200)); | |||
fill = shape.getFill(); | |||
fill.setFillType(Fill.FILL_SHADE); | |||
fill.setBackgroundColor(Color.red); | |||
fill.setForegroundColor(Color.green); | |||
slide.addShape(shape); | |||
//serialize and read again | |||
ByteArrayOutputStream out = new ByteArrayOutputStream(); | |||
ppt.write(out); | |||
out.close(); | |||
ppt = new SlideShow(new HSLFSlideShow(new ByteArrayInputStream(out.toByteArray()))); | |||
Slide[] slides = ppt.getSlides(); | |||
fill = slides[0].getBackground().getFill(); | |||
assertEquals(Fill.FILL_PICTURE, fill.getFillType()); | |||
shape = slides[0].getShapes()[0]; | |||
assertEquals(Fill.FILL_SOLID, shape.getFill().getFillType()); | |||
fill = slides[1].getBackground().getFill(); | |||
assertEquals(Fill.FILL_PATTERN, fill.getFillType()); | |||
shape = slides[1].getShapes()[0]; | |||
assertEquals(Fill.FILL_BACKGROUND, shape.getFill().getFillType()); | |||
fill = slides[2].getBackground().getFill(); | |||
assertEquals(Fill.FILL_TEXTURE, fill.getFillType()); | |||
shape = slides[2].getShapes()[0]; | |||
assertEquals(Fill.FILL_PICTURE, shape.getFill().getFillType()); | |||
fill = slides[3].getBackground().getFill(); | |||
assertEquals(Fill.FILL_SHADE_CENTER, fill.getFillType()); | |||
shape = slides[3].getShapes()[0]; | |||
assertEquals(Fill.FILL_SHADE, shape.getFill().getFillType()); | |||
} | |||
} |