From de14b40a970a2626701f59f1ccfa3b6970614519 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Mon, 7 Nov 2011 09:12:16 +0000 Subject: [PATCH] more progress with xlsf: support for gradient and texture fills, backgrounds, improved drawing of preset shapes and many more updates ... git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1198658 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 4 + .../poi/xslf/usermodel/tutorial/Step1.java | 68 ++ .../poi/xslf/usermodel/tutorial/Step2.java | 80 +++ .../extractor/XSLFPowerPointExtractor.java | 2 +- .../poi/xslf/model/geom/ArcToCommand.java | 6 +- .../apache/poi/xslf/model/geom/Context.java | 12 +- .../poi/xslf/model/geom/CustomGeometry.java | 22 +- .../poi/xslf/model/geom/IAdjustableShape.java | 7 - .../poi/xslf/model/geom/LineToCommand.java | 5 + .../poi/xslf/model/geom/MoveToCommand.java | 5 + .../apache/poi/xslf/model/geom/Outline.java | 45 ++ .../org/apache/poi/xslf/model/geom/Path.java | 32 +- .../poi/xslf/usermodel/Placeholder.java | 3 +- .../poi/xslf/usermodel/RenderableShape.java | 562 +++++++++++++++- .../poi/xslf/usermodel/SlideLayout.java | 99 +++ .../apache/poi/xslf/usermodel/TextAlign.java | 5 +- .../apache/poi/xslf/usermodel/TextCap.java | 33 + .../poi/xslf/usermodel/XMLSlideShow.java | 32 +- .../poi/xslf/usermodel/XSLFAutoShape.java | 4 +- .../poi/xslf/usermodel/XSLFBackground.java | 57 +- .../apache/poi/xslf/usermodel/XSLFColor.java | 79 ++- .../xslf/usermodel/XSLFConnectorShape.java | 66 +- .../poi/xslf/usermodel/XSLFDrawing.java | 3 +- .../poi/xslf/usermodel/XSLFFreeformShape.java | 6 - .../poi/xslf/usermodel/XSLFGraphicFrame.java | 2 +- .../poi/xslf/usermodel/XSLFGroupShape.java | 66 +- .../poi/xslf/usermodel/XSLFImageRendener.java | 19 +- .../apache/poi/xslf/usermodel/XSLFNotes.java | 5 + .../poi/xslf/usermodel/XSLFNotesMaster.java | 9 +- .../poi/xslf/usermodel/XSLFPictureShape.java | 31 +- .../poi/xslf/usermodel/XSLFRenderingHint.java | 34 +- .../apache/poi/xslf/usermodel/XSLFShadow.java | 48 +- .../apache/poi/xslf/usermodel/XSLFShape.java | 63 +- .../apache/poi/xslf/usermodel/XSLFSheet.java | 157 +++-- .../poi/xslf/usermodel/XSLFSimpleShape.java | 621 ++++++------------ .../apache/poi/xslf/usermodel/XSLFSlide.java | 73 +- .../poi/xslf/usermodel/XSLFSlideLayout.java | 100 +-- .../poi/xslf/usermodel/XSLFSlideMaster.java | 50 +- .../poi/xslf/usermodel/XSLFTableCell.java | 10 +- .../poi/xslf/usermodel/XSLFTextBox.java | 19 - .../poi/xslf/usermodel/XSLFTextParagraph.java | 65 +- .../poi/xslf/usermodel/XSLFTextRun.java | 55 +- .../poi/xslf/usermodel/XSLFTextShape.java | 152 +++-- .../apache/poi/xslf/usermodel/XSLFTheme.java | 40 +- .../org/apache/poi/xslf/util/PPTX2PNG.java | 32 +- .../poi/xslf/geom/TestFormulaParser.java | 2 +- .../poi/xslf/geom/TestPresetGeometries.java | 6 +- .../poi/xslf/usermodel/TestPPTX2PNG.java | 2 +- .../poi/xslf/usermodel/TestXSLFAutoShape.java | 60 +- .../poi/xslf/usermodel/TestXSLFColor.java | 16 +- .../poi/xslf/usermodel/TestXSLFSlide.java | 13 +- .../poi/xslf/usermodel/TestXSLFSlideShow.java | 4 +- .../poi/xslf/usermodel/TestXSLFTextShape.java | 96 +-- .../poi/xslf/usermodel/TestXSLFTheme.java | 135 +++- .../org/apache/poi/xslf/usermodel/empty.pptx | Bin .../xslf/usermodel/presetShapeDefinitions.xml | 0 test-data/slideshow/pptx2svg.pptx | Bin 0 -> 149172 bytes test-data/slideshow/pptx2svg.svg | 94 +++ test-data/slideshow/themes.pptx | Bin 0 -> 309866 bytes 59 files changed, 2331 insertions(+), 985 deletions(-) create mode 100644 src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step1.java create mode 100644 src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step2.java create mode 100644 src/ooxml/java/org/apache/poi/xslf/model/geom/Outline.java create mode 100644 src/ooxml/java/org/apache/poi/xslf/usermodel/SlideLayout.java create mode 100644 src/ooxml/java/org/apache/poi/xslf/usermodel/TextCap.java rename src/resources/{scratchpad => ooxml}/org/apache/poi/xslf/usermodel/empty.pptx (100%) rename src/resources/{scratchpad => ooxml}/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml (100%) create mode 100644 test-data/slideshow/pptx2svg.pptx create mode 100644 test-data/slideshow/pptx2svg.svg create mode 100755 test-data/slideshow/themes.pptx diff --git a/build.xml b/build.xml index 62c208bf1d..84c2bccbfd 100644 --- a/build.xml +++ b/build.xml @@ -108,6 +108,7 @@ under the License. + @@ -553,6 +554,9 @@ under the License. + + + diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step1.java b/src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step1.java new file mode 100644 index 0000000000..a83a17e4b8 --- /dev/null +++ b/src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step1.java @@ -0,0 +1,68 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.xslf.usermodel.tutorial; + +import org.apache.poi.xslf.usermodel.XMLSlideShow; +import org.apache.poi.xslf.usermodel.XSLFShape; +import org.apache.poi.xslf.usermodel.XSLFSlide; +import org.apache.poi.xslf.usermodel.XSLFTextParagraph; +import org.apache.poi.xslf.usermodel.XSLFTextRun; +import org.apache.poi.xslf.usermodel.XSLFTextShape; + +import java.io.FileInputStream; + +/** + * Reading a .pptx presentation and printing basic shape properties + * + * @author Yegor Kozlov + */ +public class Step1 { + + public static void main(String[] args) throws Exception { + if(args.length == 0) { + System.out.println("Input file is required"); + return; + } + + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(args[0])); + + for(XSLFSlide slide : ppt.getSlides()){ + System.out.println("Title: " + slide.getTitle()); + + for(XSLFShape shape : slide.getShapes()){ + if(shape instanceof XSLFTextShape) { + XSLFTextShape tsh = (XSLFTextShape)shape; + for(XSLFTextParagraph p : tsh){ + System.out.println("Paragraph level: " + p.getLevel()); + for(XSLFTextRun r : p){ + System.out.println(r.getText()); + System.out.println(" bold: " + r.isBold()); + System.out.println(" italic: " + r.isItalic()); + System.out.println(" underline: " + r.isUnderline()); + System.out.println(" font.family: " + r.getFontFamily()); + System.out.println(" font.size: " + r.getFontSize()); + System.out.println(" font.color: " + r.getFontColor()); + } + } + } + } + } + } +} diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step2.java b/src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step2.java new file mode 100644 index 0000000000..16b155d3f2 --- /dev/null +++ b/src/examples/src/org/apache/poi/xslf/usermodel/tutorial/Step2.java @@ -0,0 +1,80 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.xslf.usermodel.tutorial; + +import org.apache.poi.xslf.usermodel.SlideLayout; +import org.apache.poi.xslf.usermodel.XMLSlideShow; +import org.apache.poi.xslf.usermodel.XSLFSlide; +import org.apache.poi.xslf.usermodel.XSLFSlideLayout; +import org.apache.poi.xslf.usermodel.XSLFSlideMaster; +import org.apache.poi.xslf.usermodel.XSLFTextShape; + +import java.io.FileOutputStream; + +/** + * Create slides from pre-defined slide layouts + * + * @author Yegor Kozlov + */ +public class Step2 { + public static void main(String[] args) throws Exception{ + XMLSlideShow ppt = new XMLSlideShow(); + + + // first see what slide layouts are available by default + System.out.println("Available slide layouts:"); + for(XSLFSlideMaster master : ppt.getSlideMasters()){ + for(XSLFSlideLayout layout : master.getSlideLayouts()){ + System.out.println(layout.getType()); + } + } + + // blank slide + XSLFSlide blankSlide = ppt.createSlide(); + + XSLFSlideMaster defaultMaster = ppt.getSlideMasters()[0]; + + // title slide + XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE); + XSLFSlide slide1 = ppt.createSlide(titleLayout); + XSLFTextShape title1 = slide1.getPlaceholder(0); + title1.setText("First Title"); + + // title and content + XSLFSlideLayout titleBodyLayout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT); + XSLFSlide slide2 = ppt.createSlide(titleBodyLayout); + + XSLFTextShape title2 = slide2.getPlaceholder(0); + title2.setText("Second Title"); + + XSLFTextShape body2 = slide2.getPlaceholder(1); + body2.clearText(); // unset any existing text + body2.addNewTextParagraph().addNewTextRun().setText("First paragraph"); + body2.addNewTextParagraph().addNewTextRun().setText("Second paragraph"); + body2.addNewTextParagraph().addNewTextRun().setText("Third paragraph"); + + + + FileOutputStream out = new FileOutputStream("step2.pptx"); + ppt.write(out); + out.close(); + + } +} diff --git a/src/ooxml/java/org/apache/poi/xslf/extractor/XSLFPowerPointExtractor.java b/src/ooxml/java/org/apache/poi/xslf/extractor/XSLFPowerPointExtractor.java index 812c7ad0e6..0f9a26fe21 100644 --- a/src/ooxml/java/org/apache/poi/xslf/extractor/XSLFPowerPointExtractor.java +++ b/src/ooxml/java/org/apache/poi/xslf/extractor/XSLFPowerPointExtractor.java @@ -128,7 +128,7 @@ public class XSLFPowerPointExtractor extends POIXMLTextExtractor { XSLFNotes notes = slide.getNotes(); XSLFComments comments = slide.getComments(); XSLFSlideLayout layout = slide.getSlideLayout(); - XSLFSlideMaster master = slide.getMasterSheet(); + XSLFSlideMaster master = layout.getSlideMaster(); // TODO Do the slide's name // (Stored in docProps/app.xml) diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/ArcToCommand.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/ArcToCommand.java index 9b2e1bcf31..b1ea0defc8 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/ArcToCommand.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/ArcToCommand.java @@ -57,15 +57,11 @@ public class ArcToCommand implements PathCommand { double x0 = pt.getX() - rx - rx * Math.cos(Math.toRadians(start)); double y0 = pt.getY() - ry - ry * Math.sin(Math.toRadians(start)); - if(start == 180 && extent == 180) { - x0 -= rx*2; //YK: TODO revisit the code and get rid of this hack - } - Arc2D arc = new Arc2D.Double( x0, y0, 2 * rx, 2 * ry, - -start, -extent, // negate angles because DrawingML rotates counter-clockwise + -start, -extent, Arc2D.OPEN); path.append(arc, true); } diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/Context.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/Context.java index 230524cfde..ea86c51002 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/Context.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/Context.java @@ -29,17 +29,19 @@ import java.util.Map; * @author Yegor Kozlov */ public class Context { - Map _ctx = new HashMap(); - IAdjustableShape _props; - - public Context(CustomGeometry geom, IAdjustableShape props){ + final Map _ctx = new HashMap(); + final IAdjustableShape _props; + final Rectangle2D _anchor; + + public Context(CustomGeometry geom, Rectangle2D anchor, IAdjustableShape props){ _props = props; + _anchor = anchor; for(Guide gd : geom.adjusts) evaluate(gd); for(Guide gd : geom.guides) evaluate(gd); } public Rectangle2D getShapeAnchor(){ - return _props.getAnchor(); + return _anchor; } public Guide getAdjustValue(String name){ diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/CustomGeometry.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/CustomGeometry.java index 7507f55b21..6745ccd513 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/CustomGeometry.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/CustomGeometry.java @@ -24,6 +24,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.*; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.awt.geom.Rectangle2D; /** * Definition of a custom geometric shape @@ -34,8 +35,9 @@ public class CustomGeometry implements Iterable{ List adjusts = new ArrayList(); List guides = new ArrayList(); List paths = new ArrayList(); + Path textBounds; - public CustomGeometry(CTCustomGeometry2D geom){ + public CustomGeometry(CTCustomGeometry2D geom) { CTGeomGuideList avLst = geom.getAvLst(); if(avLst != null) for(CTGeomGuide gd : avLst.getGdList()){ adjusts.add(new AdjustValue(gd)); @@ -50,6 +52,21 @@ public class CustomGeometry implements Iterable{ if(pathLst != null) for(CTPath2D spPath : pathLst.getPathList()){ paths.add(new Path(spPath)); } + + if(geom.isSetRect()) { + CTGeomRect rect = geom.getRect(); + textBounds = new Path(); + textBounds.addCommand( + new MoveToCommand(rect.getL().toString(), rect.getT().toString())); + textBounds.addCommand( + new LineToCommand(rect.getR().toString(), rect.getT().toString())); + textBounds.addCommand( + new LineToCommand(rect.getR().toString(), rect.getB().toString())); + textBounds.addCommand( + new LineToCommand(rect.getL().toString(), rect.getB().toString())); + textBounds.addCommand( + new ClosePathCommand()); + } } @@ -58,4 +75,7 @@ public class CustomGeometry implements Iterable{ return paths.iterator(); } + public Path getTextBounds(){ + return textBounds; + } } diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/IAdjustableShape.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/IAdjustableShape.java index 174af3d34c..44f5a562f7 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/IAdjustableShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/IAdjustableShape.java @@ -19,7 +19,6 @@ package org.apache.poi.xslf.model.geom; -import java.awt.geom.Rectangle2D; /** * A bridge to the consumer application. @@ -29,12 +28,6 @@ import java.awt.geom.Rectangle2D; * @author Yegor Kozlov */ public interface IAdjustableShape { - /** - * - * @return bounds of the shape - */ - Rectangle2D getAnchor(); - /** * * @param name name of a adjust value, e.g. adj1 diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/LineToCommand.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/LineToCommand.java index 3df2e499e1..5142dd234a 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/LineToCommand.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/LineToCommand.java @@ -36,6 +36,11 @@ public class LineToCommand implements PathCommand { arg2 = pt.getY().toString(); } + LineToCommand(String s1, String s2){ + arg1 = s1; + arg2 = s2; + } + public void execute(GeneralPath path, Context ctx){ double x = ctx.getValue(arg1); double y = ctx.getValue(arg2); diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/MoveToCommand.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/MoveToCommand.java index a5a4b5ce69..9d9575ace1 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/MoveToCommand.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/MoveToCommand.java @@ -36,6 +36,11 @@ public class MoveToCommand implements PathCommand { arg2 = pt.getY().toString(); } + MoveToCommand(String s1, String s2){ + arg1 = s1; + arg2 = s2; + } + public void execute(GeneralPath path, Context ctx){ double x = ctx.getValue(arg1); double y = ctx.getValue(arg2); diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/Outline.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/Outline.java new file mode 100644 index 0000000000..dbf9f1f9c9 --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/Outline.java @@ -0,0 +1,45 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.xslf.model.geom; + +import java.awt.Shape; + +/** +* Date: 11/6/11 +* +* @author Yegor Kozlov +*/ +public class Outline { + private Shape shape; + private Path path; + + public Outline(Shape shape, Path path){ + this.shape = shape; + this.path = path; + } + + public Path getPath(){ + return path; + } + + public Shape getOutline(){ + return shape; + } +} diff --git a/src/ooxml/java/org/apache/poi/xslf/model/geom/Path.java b/src/ooxml/java/org/apache/poi/xslf/model/geom/Path.java index 9d5e9f71d3..94ab37662c 100644 --- a/src/ooxml/java/org/apache/poi/xslf/model/geom/Path.java +++ b/src/ooxml/java/org/apache/poi/xslf/model/geom/Path.java @@ -39,11 +39,26 @@ import java.util.List; public class Path { private final List commands; boolean _fill, _stroke; + long _w, _h; + + public Path(){ + this(true, true); + } + + public Path(boolean fill, boolean stroke){ + commands = new ArrayList(); + _w = -1; + _h = -1; + _fill = fill; + _stroke = stroke; + } public Path(CTPath2D spPath){ _fill = spPath.getFill() != STPathFillMode.NONE; _stroke = spPath.getStroke(); - + _w = spPath.isSetW() ? spPath.getW() : -1; + _h = spPath.isSetH() ? spPath.getH() : -1; + commands = new ArrayList(); for(XmlObject ch : spPath.selectPath("*")){ if(ch instanceof CTPath2DMoveTo){ @@ -74,6 +89,13 @@ public class Path { } } + public void addCommand(PathCommand cmd){ + commands.add(cmd); + } + + /** + * Convert the internal represenation to java.awt.GeneralPath + */ public GeneralPath getPath(Context ctx) { GeneralPath path = new GeneralPath(); for(PathCommand cmd : commands) @@ -88,4 +110,12 @@ public class Path { public boolean isFilled(){ return _fill; } + + public long getW(){ + return _w; + } + + public long getH(){ + return _h; + } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/Placeholder.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/Placeholder.java index a96e88778d..087b28c054 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/Placeholder.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/Placeholder.java @@ -30,7 +30,7 @@ public enum Placeholder { SLIDE_NUMBER, FOOTER, HEADER, - OBJECT, + CONTENT, CHART, TABLE, CLIP_ART, @@ -38,5 +38,4 @@ public enum Placeholder { MEDIA, SLIDE_IMAGE, PICTURE - } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/RenderableShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/RenderableShape.java index 393ba333e6..bbd0de9ea6 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/RenderableShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/RenderableShape.java @@ -1,11 +1,563 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.xslf.usermodel; +import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackageRelationship; +import org.apache.poi.util.Internal; +import org.apache.poi.util.Units; +import org.apache.poi.xslf.model.PropertyFetcher; +import org.apache.poi.xslf.model.geom.Context; +import org.apache.poi.xslf.model.geom.CustomGeometry; +import org.apache.poi.xslf.model.geom.Guide; +import org.apache.poi.xslf.model.geom.IAdjustableShape; +import org.apache.poi.xslf.model.geom.Outline; +import org.apache.poi.xslf.model.geom.Path; +import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip; +import org.openxmlformats.schemas.drawingml.x2006.main.CTBlipFillProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGradientFillProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGradientStop; +import org.openxmlformats.schemas.drawingml.x2006.main.CTLineProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTNoFillProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPathShadeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference; +import org.openxmlformats.schemas.drawingml.x2006.main.STPathShadeType; + +import java.awt.AlphaComposite; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.GradientPaint; +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.TexturePaint; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; + /** - * Created by IntelliJ IDEA. - * User: yegor - * Date: Oct 27, 2011 - * Time: 4:50:08 PM - * To change this template use File | Settings | File Templates. + * Encapsulates logic to translate DrawingML objects to Java2D */ +@Internal class RenderableShape { + public final static Color NO_PAINT = new Color(0xFF, 0xFF, 0xFF, 0); + + private XSLFSimpleShape _shape; + + public RenderableShape(XSLFSimpleShape shape){ + _shape = shape; + } + + /** + * Convert shape fill into java.awt.Paint. The result is either Color or + * TexturePaint or GradientPaint or null + * + * @param graphics the target graphics + * @param obj the xml to read. Must contain elements from the EG_ColorChoice group: + * + * a:scrgbClr RGB Color Model - Percentage Variant + * a:srgbClr RGB Color Model - Hex Variant + * a:hslClr Hue, Saturation, Luminance Color Model + * a:sysClr System Color + * a:schemeClr Scheme Color + * a:prstClr Preset Color + * + * + * @param phClr context color + * @param parentPart the parent package part. Any external references (images, etc.) are resolved relative to it. + * + * @return the applied Paint or null if none was applied + */ + public Paint selectPaint(Graphics2D graphics, XmlObject obj, CTSchemeColor phClr, PackagePart parentPart) { + XSLFTheme theme = _shape.getSheet().getTheme(); + Rectangle2D anchor = _shape.getAnchor(); + + Paint paint = null; + if (obj instanceof CTNoFillProperties) { + paint = NO_PAINT; + + } + else if (obj instanceof CTSolidColorFillProperties) { + CTSolidColorFillProperties solidFill = (CTSolidColorFillProperties) obj; + XSLFColor c = new XSLFColor(solidFill, theme, phClr); + paint = c.getColor(); + } + else if (obj instanceof CTBlipFillProperties) { + CTBlipFillProperties blipFill = (CTBlipFillProperties)obj; + paint = createTexturePaint(blipFill, graphics, parentPart); + } + else if (obj instanceof CTGradientFillProperties) { + CTGradientFillProperties gradFill = (CTGradientFillProperties) obj; + if (gradFill.isSetLin()) { + paint = createLinearGradientPaint(gradFill, anchor, theme, phClr); + } else if (gradFill.isSetPath()){ + CTPathShadeProperties ps = gradFill.getPath(); + if(ps.getPath() == STPathShadeType.CIRCLE){ + paint = createRadialGradientPaint(gradFill, anchor, theme, phClr); + } + } + } + + return paint; + } + + private Paint createTexturePaint(CTBlipFillProperties blipFill, Graphics2D graphics, + PackagePart parentPart){ + Paint paint = null; + CTBlip blip = blipFill.getBlip(); + String blipId = blip.getEmbed(); + PackageRelationship rel = parentPart.getRelationship(blipId); + if (rel != null) { + XSLFImageRendener renderer = null; + if (graphics != null) + renderer = (XSLFImageRendener) graphics.getRenderingHint(XSLFRenderingHint.IMAGE_RENDERER); + if (renderer == null) renderer = new XSLFImageRendener(); + + try { + BufferedImage img = renderer.readImage(parentPart.getRelatedPart(rel)); + if (blip.sizeOfAlphaModFixArray() > 0) { + float alpha = blip.getAlphaModFixArray(0).getAmt() / 100000.f; + AlphaComposite ac = AlphaComposite.getInstance( + AlphaComposite.SRC_OVER, alpha); + if (graphics != null) graphics.setComposite(ac); + } + + if(img != null) { + paint = new TexturePaint( + img, new Rectangle2D.Double(0, 0, img.getWidth(), img.getHeight())); + } + } + catch (Exception e) { + e.printStackTrace(); + } + } + return paint; + } + + private static Paint createLinearGradientPaint( + CTGradientFillProperties gradFill, Rectangle2D anchor, + XSLFTheme theme, CTSchemeColor phClr) { + double angle = gradFill.getLin().getAng() / 60000; + CTGradientStop[] gs = gradFill.getGsLst().getGsArray(); + + Arrays.sort(gs, new Comparator() { + public int compare(CTGradientStop o1, CTGradientStop o2) { + Integer pos1 = o1.getPos(); + Integer pos2 = o2.getPos(); + return pos1.compareTo(pos2); + } + }); + + Color[] colors = new Color[gs.length]; + float[] fractions = new float[gs.length]; + + AffineTransform at = AffineTransform.getRotateInstance( + Math.toRadians(angle), + anchor.getX() + anchor.getWidth() / 2, + anchor.getY() + anchor.getHeight() / 2); + + double diagonal = Math.sqrt(anchor.getHeight() * anchor.getHeight() + anchor.getWidth() * anchor.getWidth()); + Point2D p1 = new Point2D.Double(anchor.getX() + anchor.getWidth() / 2 - diagonal / 2, + anchor.getY() + anchor.getHeight() / 2); + p1 = at.transform(p1, null); + + Point2D p2 = new Point2D.Double(anchor.getX() + anchor.getWidth(), anchor.getY() + anchor.getHeight() / 2); + p2 = at.transform(p2, null); + + snapToAnchor(p1, anchor); + snapToAnchor(p2, anchor); + + for (int i = 0; i < gs.length; i++) { + CTGradientStop stop = gs[i]; + colors[i] = new XSLFColor(stop, theme, phClr).getColor(); + fractions[i] = stop.getPos() / 100000.f; + } + + // Trick to return GradientPaint on JDK 1.5 and LinearGradientPaint on JDK 1.6+ + Paint paint; + try { + Class clz = Class.forName("java.awt.LinearGradientPaint"); + Constructor c = + clz.getConstructor(Point2D.class, Point2D.class, float[].class, Color[].class); + paint = (Paint) c.newInstance(p1, p2, fractions, colors); + } catch (ClassNotFoundException e) { + paint = new GradientPaint(p1, colors[0], p2, colors[colors.length - 1]); + } catch (Exception e) { + throw new RuntimeException(e); + } + return paint; + } + + private static Paint createRadialGradientPaint( + CTGradientFillProperties gradFill, Rectangle2D anchor, + XSLFTheme theme, CTSchemeColor phClr) { + CTGradientStop[] gs = gradFill.getGsLst().getGsArray(); + + Point2D pCenter = new Point2D.Double(anchor.getX() + anchor.getWidth()/2, + anchor.getY() + anchor.getHeight()/2); + + float radius = (float)Math.max(anchor.getWidth(), anchor.getHeight()); + + Arrays.sort(gs, new Comparator() { + public int compare(CTGradientStop o1, CTGradientStop o2) { + Integer pos1 = o1.getPos(); + Integer pos2 = o2.getPos(); + return pos1.compareTo(pos2); + } + }); + + Color[] colors = new Color[gs.length]; + float[] fractions = new float[gs.length]; + + + for (int i = 0; i < gs.length; i++) { + CTGradientStop stop = gs[i]; + colors[i] = new XSLFColor(stop, theme, phClr).getColor(); + fractions[i] = stop.getPos() / 100000.f; + } + + // Trick to return GradientPaint on JDK 1.5 and RadialGradientPaint on JDK 1.6+ + Paint paint; + try { + Class clz = Class.forName("java.awt.RadialGradientPaint"); + Constructor c = + clz.getConstructor(Point2D.class, float.class, + float[].class, Color[].class); + paint = (Paint) c.newInstance(pCenter, radius, fractions, colors); + } catch (ClassNotFoundException e) { + // the result on JDK 1.5 is incorrect, but it is better than nothing + paint = new GradientPaint( + new Point2D.Double(anchor.getX(), anchor.getY()), + colors[0], pCenter, colors[colors.length - 1]); + } catch (Exception e) { + throw new RuntimeException(e); + } + return paint; + } + + private static void snapToAnchor(Point2D p, Rectangle2D anchor) { + if (p.getX() < anchor.getX()) { + p.setLocation(anchor.getX(), p.getY()); + } else if (p.getX() > (anchor.getX() + anchor.getWidth())) { + p.setLocation(anchor.getX() + anchor.getWidth(), p.getY()); + } + + if (p.getY() < anchor.getY()) { + p.setLocation(p.getX(), anchor.getY()); + } else if (p.getY() > (anchor.getY() + anchor.getHeight())) { + p.setLocation(p.getX(), anchor.getY() + anchor.getHeight()); + } + } + + + @SuppressWarnings("deprecation") // getXYZArray() array accessors are deprecated + Paint getPaint(Graphics2D graphics, XmlObject spPr, CTSchemeColor phClr) { + + Paint paint = null; + for (XmlObject obj : spPr.selectPath("*")) { + paint = selectPaint(graphics, obj, phClr, _shape.getSheet().getPackagePart()); + if(paint != null) break; + } + return paint == NO_PAINT ? null : paint; + } + + + /** + * fetch shape fill as a java.awt.Paint + * + * @return either Color or GradientPaint or TexturePaint or null + */ + Paint getFillPaint(final Graphics2D graphics) { + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { + CTShapeProperties spPr = shape.getSpPr(); + if (spPr.isSetNoFill()) { + setValue(RenderableShape.NO_PAINT); // use it as 'nofill' value + return true; + } + Paint paint = getPaint(graphics, spPr, null); + if (paint != null) { + setValue(paint); + return true; + } + return false; + } + }; + _shape.fetchShapeProperty(fetcher); + + Paint paint = fetcher.getValue(); + if (paint == null) { + // fill color was not found, check if it is defined in the theme + CTShapeStyle style = _shape.getSpStyle(); + if (style != null) { + // get a reference to a fill style within the style matrix. + CTStyleMatrixReference fillRef = style.getFillRef(); + // The idx attribute refers to the index of a fill style or + // background fill style within the presentation's style matrix, defined by the fmtScheme element. + // value of 0 or 1000 indicates no background, + // values 1-999 refer to the index of a fill style within the fillStyleLst element + // values 1001 and above refer to the index of a background fill style within the bgFillStyleLst element. + int idx = (int)fillRef.getIdx(); + CTSchemeColor phClr = fillRef.getSchemeClr(); + XSLFSheet sheet = _shape.getSheet(); + XSLFTheme theme = sheet.getTheme(); + XmlObject fillProps = null; + if(idx >= 1 && idx <= 999){ + fillProps = theme.getXmlObject(). + getThemeElements().getFmtScheme().getFillStyleLst().selectPath("*")[idx - 1]; + } else if (idx >= 1001 ){ + fillProps = theme.getXmlObject(). + getThemeElements().getFmtScheme().getBgFillStyleLst().selectPath("*")[idx - 1001]; + } + if(fillProps != null) { + paint = selectPaint(graphics, fillProps, phClr, sheet.getPackagePart()); + } + } + } + return paint == RenderableShape.NO_PAINT ? null : paint; + } + + public Paint getLinePaint(final Graphics2D graphics) { + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { + CTLineProperties spPr = shape.getSpPr().getLn(); + if (spPr != null) { + if (spPr.isSetNoFill()) { + setValue(NO_PAINT); // use it as 'nofill' value + return true; + } + Paint paint = getPaint(graphics, spPr, null); + if (paint != null) { + setValue(paint); + return true; + } + } + return false; + + } + }; + _shape.fetchShapeProperty(fetcher); + + Paint paint = fetcher.getValue(); + if (paint == null) { + // line color was not found, check if it is defined in the theme + CTShapeStyle style = _shape.getSpStyle(); + if (style != null) { + // get a reference to a line style within the style matrix. + CTStyleMatrixReference lnRef = style.getLnRef(); + int idx = (int)lnRef.getIdx(); + CTSchemeColor phClr = lnRef.getSchemeClr(); + if(idx > 0){ + XSLFTheme theme = _shape.getSheet().getTheme(); + XmlObject lnProps = theme.getXmlObject(). + getThemeElements().getFmtScheme().getLnStyleLst().selectPath("*")[idx - 1]; + paint = getPaint(graphics, lnProps, phClr); + } + } + } + + return paint == NO_PAINT ? null : paint; + } + + /** + * convert PPT dash into java.awt.BasicStroke + * + * The mapping is derived empirically on PowerPoint 2010 + */ + private static float[] getDashPattern(LineDash lineDash, float lineWidth) { + float[] dash = null; + switch (lineDash) { + case SYS_DOT: + dash = new float[]{lineWidth, lineWidth}; + break; + case SYS_DASH: + dash = new float[]{2 * lineWidth, 2 * lineWidth}; + break; + case DASH: + dash = new float[]{3 * lineWidth, 4 * lineWidth}; + break; + case DASH_DOT: + dash = new float[]{4 * lineWidth, 3 * lineWidth, lineWidth, + 3 * lineWidth}; + break; + case LG_DASH: + dash = new float[]{8 * lineWidth, 3 * lineWidth}; + break; + case LG_DASH_DOT: + dash = new float[]{8 * lineWidth, 3 * lineWidth, lineWidth, + 3 * lineWidth}; + break; + case LG_DASH_DOT_DOT: + dash = new float[]{8 * lineWidth, 3 * lineWidth, lineWidth, + 3 * lineWidth, lineWidth, 3 * lineWidth}; + break; + } + return dash; + } + + + public Stroke applyStroke(Graphics2D graphics) { + + float lineWidth = (float) _shape.getLineWidth(); + LineDash lineDash = _shape.getLineDash(); + float[] dash = null; + float dash_phase = 0; + if (lineDash != null) { + dash = getDashPattern(lineDash, lineWidth); + } + + int cap = BasicStroke.CAP_BUTT; + LineCap lineCap = _shape.getLineCap(); + if (lineCap != null) { + switch (lineCap) { + case ROUND: + cap = BasicStroke.CAP_ROUND; + break; + case SQUARE: + cap = BasicStroke.CAP_SQUARE; + break; + default: + cap = BasicStroke.CAP_BUTT; + break; + } + } + + int meter = BasicStroke.JOIN_ROUND; + + Stroke stroke = new BasicStroke(lineWidth, cap, meter, Math.max(1, lineWidth), dash, + dash_phase); + graphics.setStroke(stroke); + return stroke; + } + + public void render(Graphics2D graphics){ + Collection elems = computeOutlines(); + + // shadow + XSLFShadow shadow = _shape.getShadow(); + + // first fill + Paint fill = getFillPaint(graphics); + if(fill != null) for(Outline o : elems){ + if(o.getPath().isFilled()){ + if(shadow != null) shadow.fill(graphics, o.getOutline()); + + graphics.setPaint(fill); + graphics.fill(o.getOutline()); + } + } + + // then draw any content within this shape (text, image, etc.) + _shape.drawContent(graphics); + + // then stroke the shape outline + Paint line = getLinePaint(graphics); + if(line != null) for(Outline o : elems){ + if(o.getPath().isStroked()){ + applyStroke(graphics); // the stroke applies both to the shadow and the shape + + if(shadow != null) shadow.draw(graphics, o.getOutline()); + + graphics.setPaint(line); + graphics.draw(o.getOutline()); + } + } + } + + private Collection computeOutlines() { + CustomGeometry geom = _shape.getGeometry(); + + Collection lst = new ArrayList(); + + Rectangle2D anchor = _shape.getAnchor(); + for (Path p : geom) { + + double w = p.getW() == -1 ? anchor.getWidth() * Units.EMU_PER_POINT : p.getW(); + double h = p.getH() == -1 ? anchor.getHeight() * Units.EMU_PER_POINT : p.getH(); + + // the guides in the shape definitions are all defined relative to each other, + // so we build the path starting from (0,0). + final Rectangle2D pathAnchor = new Rectangle2D.Double( + 0, + 0, + w, + h + ); + + Context ctx = new Context(geom, pathAnchor, new IAdjustableShape() { + + public Guide getAdjustValue(String name) { + CTPresetGeometry2D prst = _shape.getSpPr().getPrstGeom(); + if (prst.isSetAvLst()) { + for (CTGeomGuide g : prst.getAvLst().getGdList()) { + if (g.getName().equals(name)) { + return new Guide(g); + } + } + } + return null; + } + }) ; + + Shape gp = p.getPath(ctx); + + // translate the result to the canvas coordinates in points + AffineTransform at = new AffineTransform(); + at.translate(anchor.getX(), anchor.getY()); + + double scaleX, scaleY; + if (p.getW() != -1) { + scaleX = anchor.getWidth() / p.getW(); + } else { + scaleX = 1.0 / Units.EMU_PER_POINT; + } + if (p.getH() != -1) { + scaleY = anchor.getHeight() / p.getH(); + } else { + scaleY = 1.0 / Units.EMU_PER_POINT; + } + + at.scale(scaleX, scaleY); + + Shape canvasShape = at.createTransformedShape(gp); + + lst.add(new Outline(canvasShape, p)); + } + + // add any shape-specific stuff here (line decorations, etc.) + lst.addAll(_shape.getCustomOutlines()); + return lst; + } + } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/SlideLayout.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/SlideLayout.java new file mode 100644 index 0000000000..729057b13b --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/SlideLayout.java @@ -0,0 +1,99 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.xslf.usermodel; + +/** + * Date: 11/5/11 + * + * @author Yegor Kozlov + */ +public enum SlideLayout { + /** + * Title layout with centered title and subtitle placeholders + */ + TITLE, + /** + * Title and text + */ + TEXT, + + TWO_COL_TX, + TBL, + TEXT_AND_CHART, + + /** + * Title, chart on left and text on right + */ + CHART_AND_TEXT, + + DGM, + + /** + * Title and chart + */ + CHART, + + TX_AND_CLIP_ART, + /** + * Title, clipart on left, text on right + */ + CLIP_ART_AND_TEXT, + + /** + * Title only + */ + TITLE_ONLY, + + /** + * Blank + */ + BLANK, + + TX_AND_OBJ, + OBJ_AND_TX, + OBJ_ONLY, + /** + * title and content + */ + TITLE_AND_CONTENT, + TX_AND_MEDIA, + MEDIA_AND_TX, + OBJ_OVER_TX, + TX_OVER_OBJ, + TX_AND_TWO_OBJ, + TWO_OBJ_AND_TX, + TWO_OBJ_OVER_TX, + FOUR_OBJ, + VERT_TX, + CLIP_ART_AND_VERT_TX, + VERT_TITLE_AND_TX, + VERT_TITLE_AND_TX_OVER_CHART, + TWO_OBJ, + OBJ_AND_TWO_OBJ, + TWO_OBJ_AND_OBJ, + CUST, + /** + * Section Header + */ + SECTION_HEADER, + TWO_TX_TWO_OBJ, + OBJ_TX, + PIC_TX, +} diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/TextAlign.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/TextAlign.java index c712dbacef..2570e6cfc9 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/TextAlign.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/TextAlign.java @@ -43,5 +43,8 @@ public enum TextAlign { * is smart in the sense that it will not justify sentences * which are short */ - JUSTIFY + JUSTIFY, + JUSTIFY_LOW, + DIST, + THAI_DIST } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/TextCap.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/TextCap.java new file mode 100644 index 0000000000..2e998efcf0 --- /dev/null +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/TextCap.java @@ -0,0 +1,33 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.xslf.usermodel; + +/** + * Created by IntelliJ IDEA. + * User: yegor + * Date: 11/3/11 + * Time: 5:07 PM + * To change this template use File | Settings | File Templates. + */ +public enum TextCap { + NONE, + SMALL, + ALL +} diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index 8f25beeede..efec667a93 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -40,7 +40,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideSize; import org.openxmlformats.schemas.presentationml.x2006.main.PresentationDocument; -import java.awt.*; +import java.awt.Dimension; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -190,7 +190,13 @@ public class XMLSlideShow extends POIXMLDocument { return Collections.unmodifiableList(_pictures); } - public XSLFSlide createSlide() { + /** + * Create a slide and initialize it from the specified layout. + * + * @param layout + * @return created slide + */ + public XSLFSlide createSlide(XSLFSlideLayout layout) { int slideNumber = 256, cnt = 1; CTSlideIdList slideList; if (!_presentation.isSetSldIdLst()) slideList = _presentation.addNewSldIdLst(); @@ -209,12 +215,7 @@ public class XMLSlideShow extends POIXMLDocument { slideId.setId(slideNumber); slideId.setId2(slide.getPackageRelationship().getId()); - String masterId = _presentation.getSldMasterIdLst().getSldMasterIdArray(0).getId2(); - XSLFSlideMaster master = _masters.get(masterId); - - XSLFSlideLayout layout = master.getLayout("blank"); - if(layout == null) throw new IllegalArgumentException("Blank layout was not found"); - + layout.copyLayout(slide); slide.addRelation(layout.getPackageRelationship().getId(), layout); PackagePartName ppName = layout.getPackagePart().getPartName(); @@ -224,7 +225,20 @@ public class XMLSlideShow extends POIXMLDocument { _slides.add(slide); return slide; } - + + /** + * Create a blank slide. + */ + public XSLFSlide createSlide() { + String masterId = _presentation.getSldMasterIdLst().getSldMasterIdArray(0).getId2(); + XSLFSlideMaster master = _masters.get(masterId); + + XSLFSlideLayout layout = master.getLayout(SlideLayout.BLANK); + if(layout == null) throw new IllegalArgumentException("Blank layout was not found"); + + return createSlide(layout); + } + /** * Return the Notes Master, if there is one. * (May not be present if no notes exist) diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java index 2b8a1e08b8..5f4e838a0c 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFAutoShape.java @@ -28,16 +28,14 @@ import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTShapeNonVisual; -import java.util.regex.Pattern; /** - * Represents a preset geometric shape. + * Represents a shape with a preset geometry. * * @author Yegor Kozlov */ @Beta public class XSLFAutoShape extends XSLFTextShape { - private static final Pattern adjPtrn = Pattern.compile("val\\s+(\\d+)"); /*package*/ XSLFAutoShape(CTShape shape, XSLFSheet sheet) { super(shape, sheet); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java index cd82eabead..7d8cb061ef 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFBackground.java @@ -17,16 +17,16 @@ package org.apache.poi.xslf.usermodel; -import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; -import org.openxmlformats.schemas.presentationml.x2006.main.CTBackgroundProperties; -import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference; -import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrix; -import org.openxmlformats.schemas.drawingml.x2006.main.CTBackgroundFillStyleList; import org.apache.xmlbeans.XmlObject; -import org.apache.xmlbeans.XmlCursor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTBackgroundFillStyleList; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrixReference; +import org.openxmlformats.schemas.presentationml.x2006.main.CTBackground; -import javax.xml.namespace.QName; -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Paint; import java.awt.geom.Rectangle2D; /** @@ -49,31 +49,46 @@ public class XSLFBackground extends XSLFSimpleShape { public void draw(Graphics2D graphics) { Rectangle2D anchor = getAnchor(); - XmlObject spPr = null; + Paint fill = getPaint(graphics); + if(fill != null) { + graphics.setPaint(fill); + graphics.fill(anchor); + } + } + + /** + * @return the Paint object to fill + */ + Paint getPaint(Graphics2D graphics){ + RenderableShape rShape = new RenderableShape(this); + + Paint fill = null; CTBackground bg = (CTBackground)getXmlObject(); if(bg.isSetBgPr()){ - spPr = bg.getBgPr(); + XmlObject spPr = bg.getBgPr(); + fill = rShape.getPaint(graphics, spPr, null); } else if (bg.isSetBgRef()){ CTStyleMatrixReference bgRef= bg.getBgRef(); - int idx = (int)bgRef.getIdx() - 1000; + CTSchemeColor phClr = bgRef.getSchemeClr(); + + int idx = (int)bgRef.getIdx() - 1001; XSLFTheme theme = getSheet().getTheme(); CTBackgroundFillStyleList bgStyles = theme.getXmlObject().getThemeElements().getFmtScheme().getBgFillStyleLst(); - // TODO pass this to getPaint XmlObject bgStyle = bgStyles.selectPath("*")[idx]; + fill = rShape.selectPaint(graphics, bgStyle, phClr, theme.getPackagePart()); } - if(spPr == null){ - return; - } + return fill; + } - Paint fill = getPaint(graphics, spPr); - if(fill != null) { - graphics.setPaint(fill); - graphics.fill(anchor); + @Override + public Color getFillColor(){ + Paint p = getPaint(null); + if(p instanceof Color){ + return (Color)p; } + return null; } - - } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java index 8ca8dbde9f..c0f4762c7e 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java @@ -30,7 +30,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; import org.openxmlformats.schemas.drawingml.x2006.main.CTSystemColor; import org.w3c.dom.Node; -import java.awt.*; +import java.awt.Color; import java.util.HashMap; import java.util.Map; @@ -40,12 +40,15 @@ import java.util.Map; * @author Yegor Kozlov */ @Beta +@Internal public class XSLFColor { private XmlObject _xmlObject; private Color _color; + private CTSchemeColor _phClr; - XSLFColor(XmlObject obj, XSLFTheme theme) { + public XSLFColor(XmlObject obj, XSLFTheme theme, CTSchemeColor phClr) { _xmlObject = obj; + _phClr = phClr; _color = toColor(obj, theme); } @@ -94,7 +97,7 @@ public class XSLFColor { return result; } - static Color toColor(XmlObject obj, XSLFTheme theme) { + Color toColor(XmlObject obj, XSLFTheme theme) { Color color = null; for (XmlObject ch : obj.selectPath("*")) { if (ch instanceof CTHslColor) { @@ -102,7 +105,8 @@ public class XSLFColor { int h = hsl.getHue2(); int s = hsl.getSat2(); int l = hsl.getLum2(); - // is it correct ? + // This conversion is not correct and differs from PowerPoint. + // TODO: Revisit and improve. color = Color.getHSBColor(h / 60000f, s / 100000f, l / 100000f); } else if (ch instanceof CTPresetColor) { CTPresetColor prst = (CTPresetColor)ch; @@ -111,12 +115,13 @@ public class XSLFColor { } else if (ch instanceof CTSchemeColor) { CTSchemeColor schemeColor = (CTSchemeColor)ch; String colorRef = schemeColor.getVal().toString(); + if(_phClr != null) { + // context color overrides the theme + colorRef = _phClr.getVal().toString(); + } // find referenced CTColor in the theme and convert it to java.awt.Color via a recursive call CTColor ctColor = theme.getCTColor(colorRef); if(ctColor != null) color = toColor(ctColor, null); - else { - color = Color.black; - } } else if (ch instanceof CTScRgbColor) { // same as CTSRgbColor but with values expressed in percents CTScRgbColor scrgb = (CTScRgbColor)ch; @@ -145,21 +150,59 @@ public class XSLFColor { return color; } + /** + * Read a perecentage value from the supplied xml bean. + * Example: + * + * + * the returned value is 45 + * + * @return the percentage value in the range [0 .. 100] + */ private int getPercentageValue(String elem){ - XmlObject[] obj = _xmlObject.selectPath( - "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem); + String query = "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem; + + XmlObject[] obj; + + // first ask the context color and if not found, ask the actual color bean + if(_phClr != null){ + obj = _phClr.selectPath(query); + if(obj.length == 1){ + Node attr = obj[0].getDomNode().getAttributes().getNamedItem("val"); + if(attr != null) { + return Integer.parseInt(attr.getNodeValue()) / 1000; + } + } + } + + obj = _xmlObject.selectPath(query); if(obj.length == 1){ Node attr = obj[0].getDomNode().getAttributes().getNamedItem("val"); if(attr != null) { return Integer.parseInt(attr.getNodeValue()) / 1000; } } + + return -1; } private int getAngleValue(String elem){ - XmlObject[] obj = _xmlObject.selectPath( - "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem); + String color = "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem; + XmlObject[] obj; + + // first ask the context color and if not found, ask the actual color bean + if(_phClr != null){ + obj = _xmlObject.selectPath( color ); + if(obj.length == 1){ + Node attr = obj[0].getDomNode().getAttributes().getNamedItem("val"); + if(attr != null) { + return Integer.parseInt(attr.getNodeValue()) / 60000; + } + } + } + + obj = _xmlObject.selectPath( color ); if(obj.length == 1){ Node attr = obj[0].getDomNode().getAttributes().getNamedItem("val"); if(attr != null) { @@ -341,7 +384,7 @@ public class XSLFColor { * A 10% shade is 10% of the input color combined with 90% black. * * @return the value of the shade specified as a - * percentage with 0% indicating minimal blue and 100% indicating maximum + * percentage with 0% indicating minimal shade and 100% indicating maximum * or -1 if the value is not set */ int getShade(){ @@ -353,7 +396,7 @@ public class XSLFColor { * A 10% tint is 10% of the input color combined with 90% white. * * @return the value of the tint specified as a - * percentage with 0% indicating minimal blue and 100% indicating maximum + * percentage with 0% indicating minimal tint and 100% indicating maximum * or -1 if the value is not set */ int getTint(){ @@ -389,6 +432,10 @@ public class XSLFColor { return color; } + /** + * This algorithm returns result different from PowerPoint. + * TODO: revisit and improve + */ private static Color shade(Color c, int shade) { return new Color( (int)(c.getRed() * shade * 0.01), @@ -397,6 +444,10 @@ public class XSLFColor { c.getAlpha()); } + /** + * This algorithm returns result different from PowerPoint. + * TODO: revisit and improve + */ private static Color tint(Color c, int tint) { int r = c.getRed(); int g = c.getGreen(); @@ -414,7 +465,7 @@ public class XSLFColor { /** * Preset colors defined in DrawingML */ - static Map presetColors; + static final Map presetColors; static { presetColors = new HashMap(); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java index 2e28774a4c..647b414c53 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFConnectorShape.java @@ -20,6 +20,8 @@ package org.apache.poi.xslf.usermodel; import org.apache.poi.util.Beta; +import org.apache.poi.xslf.model.geom.Outline; +import org.apache.poi.xslf.model.geom.Path; import org.openxmlformats.schemas.drawingml.x2006.main.CTLineEndProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTLineProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; @@ -32,11 +34,14 @@ import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType; import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector; import org.openxmlformats.schemas.presentationml.x2006.main.CTConnectorNonVisual; -import java.awt.*; +import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * Specifies a connection shape. @@ -197,36 +202,7 @@ public class XSLFConnectorShape extends XSLFSimpleShape { return len == null ? LineEndLength.MEDIUM : LineEndLength.values()[len.intValue() - 1]; } - @Override - public void draw(Graphics2D graphics) { - java.awt.Shape outline = getOutline(); - - // shadow - XSLFShadow shadow = getShadow(); - - //border - Paint line = getLinePaint(graphics); - if (line != null) { - if (shadow != null) shadow.draw(graphics); - - graphics.setPaint(line); - applyStroke(graphics); - graphics.draw(outline); - - Shape tailDecoration = getTailDecoration(); - if (tailDecoration != null) { - graphics.draw(tailDecoration); - } - - Shape headDecoration = getHeadDecoration(); - if (headDecoration != null) { - graphics.draw(headDecoration); - - } - } - } - - Shape getTailDecoration() { + Outline getTailDecoration() { LineEndLength tailLength = getLineTailLength(); LineEndWidth tailWidth = getLineTailWidth(); @@ -239,17 +215,20 @@ public class XSLFConnectorShape extends XSLFSimpleShape { AffineTransform at = new AffineTransform(); Shape shape = null; + Path p = null; Rectangle2D bounds; double scaleY = Math.pow(2, tailWidth.ordinal()); double scaleX = Math.pow(2, tailLength.ordinal()); - switch (getLineHeadDecoration()) { + switch (getLineTailDecoration()) { case OVAL: + p = new Path(); shape = new Ellipse2D.Double(0, 0, lineWidth * scaleX, lineWidth * scaleY); bounds = shape.getBounds2D(); at.translate(x2 - bounds.getWidth() / 2, y2 - bounds.getHeight() / 2); at.rotate(alpha, bounds.getX() + bounds.getWidth() / 2, bounds.getY() + bounds.getHeight() / 2); break; case ARROW: + p = new Path(); GeneralPath arrow = new GeneralPath(); arrow.moveTo((float) (-lineWidth * 3), (float) (-lineWidth * 2)); arrow.lineTo(0, 0); @@ -259,6 +238,7 @@ public class XSLFConnectorShape extends XSLFSimpleShape { at.rotate(alpha); break; case TRIANGLE: + p = new Path(); scaleY = tailWidth.ordinal() + 1; scaleX = tailLength.ordinal() + 1; GeneralPath triangle = new GeneralPath(); @@ -277,10 +257,10 @@ public class XSLFConnectorShape extends XSLFSimpleShape { if (shape != null) { shape = at.createTransformedShape(shape); } - return shape; + return shape == null ? null : new Outline(shape, p); } - Shape getHeadDecoration() { + Outline getHeadDecoration() { LineEndLength headLength = getLineHeadLength(); LineEndWidth headWidth = getLineHeadWidth(); @@ -293,11 +273,13 @@ public class XSLFConnectorShape extends XSLFSimpleShape { AffineTransform at = new AffineTransform(); Shape shape = null; + Path p = null; Rectangle2D bounds; double scaleY = 1; double scaleX = 1; switch (getLineHeadDecoration()) { case OVAL: + p = new Path(); shape = new Ellipse2D.Double(0, 0, lineWidth * scaleX, lineWidth * scaleY); bounds = shape.getBounds2D(); at.translate(x1 - bounds.getWidth() / 2, y1 - bounds.getHeight() / 2); @@ -305,6 +287,7 @@ public class XSLFConnectorShape extends XSLFSimpleShape { break; case STEALTH: case ARROW: + p = new Path(); GeneralPath arrow = new GeneralPath(); arrow.moveTo((float) (lineWidth * 3 * scaleX), (float) (-lineWidth * scaleY * 2)); arrow.lineTo(0, 0); @@ -314,6 +297,7 @@ public class XSLFConnectorShape extends XSLFSimpleShape { at.rotate(alpha); break; case TRIANGLE: + p = new Path(); scaleY = headWidth.ordinal() + 1; scaleX = headLength.ordinal() + 1; GeneralPath triangle = new GeneralPath(); @@ -332,7 +316,19 @@ public class XSLFConnectorShape extends XSLFSimpleShape { if (shape != null) { shape = at.createTransformedShape(shape); } - return shape; + return shape == null ? null : new Outline(shape, p); + } + + @Override + List getCustomOutlines(){ + List lst = new ArrayList(); + + Outline head = getHeadDecoration(); + if(head != null) lst.add(head); + + Outline tail = getTailDecoration(); + if(tail != null) lst.add(tail); + return lst; } } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java index 6de6e4d775..c3b0b1a511 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java @@ -25,7 +25,8 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; -import java.awt.*; +import java.awt.Color; +import java.awt.Rectangle; /** diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java index 10490c0c9a..36afac5f8c 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFFreeformShape.java @@ -188,10 +188,4 @@ public class XSLFFreeformShape extends XSLFAutoShape { geom.addNewPathLst(); return ct; } - - @Override - protected java.awt.Shape getOutline(){ - return getPath(); - } - } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java index 8e6809bba2..5beb53850c 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java @@ -26,7 +26,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; /** diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java index 95826af0e4..3159ee98a4 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGroupShape.java @@ -35,7 +35,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShapeNonVisual; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; import java.util.List; @@ -62,10 +62,12 @@ public class XSLFGroupShape extends XSLFShape { _spPr = shape.getGrpSpPr(); } + @Override public CTGroupShape getXmlObject(){ return _shape; } + @Override public Rectangle2D getAnchor(){ CTGroupTransform2D xfrm = _spPr.getXfrm(); CTPoint2D off = xfrm.getOff(); @@ -79,6 +81,7 @@ public class XSLFGroupShape extends XSLFShape { Units.toPoints(cx), Units.toPoints(cy)); } + @Override public void setAnchor(Rectangle2D anchor){ CTGroupTransform2D xfrm = _spPr.isSetXfrm() ? _spPr.getXfrm() : _spPr.addNewXfrm(); CTPoint2D off = xfrm.isSetOff() ? xfrm.getOff() : xfrm.addNewOff(); @@ -93,6 +96,12 @@ public class XSLFGroupShape extends XSLFShape { ext.setCy(cy); } + /** + * + * @return the coordinates of the child extents rectangle + * used for calculations of grouping, scaling, and rotation + * behavior of shapes placed within a group. + */ public Rectangle2D getInteriorAnchor(){ CTGroupTransform2D xfrm = _spPr.getXfrm(); CTPoint2D off = xfrm.getChOff(); @@ -106,6 +115,12 @@ public class XSLFGroupShape extends XSLFShape { Units.toPoints(cx), Units.toPoints(cy)); } + /** + * + * @param anchor the coordinates of the child extents rectangle + * used for calculations of grouping, scaling, and rotation + * behavior of shapes placed within a group. + */ public void setInteriorAnchor(Rectangle2D anchor){ CTGroupTransform2D xfrm = _spPr.isSetXfrm() ? _spPr.getXfrm() : _spPr.addNewXfrm(); CTPoint2D off = xfrm.isSetChOff() ? xfrm.getChOff() : xfrm.addNewChOff(); @@ -120,10 +135,17 @@ public class XSLFGroupShape extends XSLFShape { ext.setCy(cy); } + /** + * + * @return child shapes contained witin this group + */ public XSLFShape[] getShapes(){ return _shapes.toArray(new XSLFShape[_shapes.size()]); } + /** + * Remove the specified shape from this group + */ public boolean removeShape(XSLFShape xShape) { XmlObject obj = xShape.getXmlObject(); if(obj instanceof CTShape){ @@ -138,10 +160,12 @@ public class XSLFGroupShape extends XSLFShape { return _shapes.remove(xShape); } + @Override public String getShapeName(){ return _shape.getNvGrpSpPr().getCNvPr().getName(); } + @Override public int getShapeId(){ return (int)_shape.getNvGrpSpPr().getCNvPr().getId(); } @@ -216,53 +240,37 @@ public class XSLFGroupShape extends XSLFShape { return sh; } - + @Override public void setFlipHorizontal(boolean flip){ _spPr.getXfrm().setFlipH(flip); } + @Override public void setFlipVertical(boolean flip){ _spPr.getXfrm().setFlipV(flip); } - /** - * Whether the shape is horizontally flipped - * - * @return whether the shape is horizontally flipped - */ + + @Override public boolean getFlipHorizontal(){ return _spPr.getXfrm().getFlipH(); } + @Override public boolean getFlipVertical(){ return _spPr.getXfrm().getFlipV(); } - /** - * Rotate this shape. - *

- * Positive angles are clockwise (i.e., towards the positive y axis); - * negative angles are counter-clockwise (i.e., towards the negative y axis). - *

- * - * @param theta the rotation angle in degrees. - */ + @Override public void setRotation(double theta){ _spPr.getXfrm().setRot((int)(theta*60000)); } - /** - * Rotation angle in degrees - *

- * Positive angles are clockwise (i.e., towards the positive y axis); - * negative angles are counter-clockwise (i.e., towards the negative y axis). - *

- * - * @return rotation angle in degrees - */ + @Override public double getRotation(){ return (double)_spPr.getXfrm().getRot()/60000; } + @Override public void draw(Graphics2D graphics){ // the coordinate system of this group of shape @@ -278,16 +286,14 @@ public class XSLFGroupShape extends XSLFShape { for (XSLFShape shape : getShapes()) { // remember the initial transform and restore it after we are done with the drawing - AffineTransform at0 = graphics.getTransform(); + AffineTransform at = graphics.getTransform(); graphics.setRenderingHint(XSLFRenderingHint.GSAVE, true); - // apply rotation and flipping - shape.applyTransform(graphics); - + shape.applyTransform(graphics); shape.draw(graphics); // restore the coordinate system - graphics.setTransform(at0); + graphics.setTransform(at); graphics.setRenderingHint(XSLFRenderingHint.GRESTORE, true); } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFImageRendener.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFImageRendener.java index 8f763622f4..a8bbe8b6a2 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFImageRendener.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFImageRendener.java @@ -19,10 +19,11 @@ package org.apache.poi.xslf.usermodel; +import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.util.Beta; import javax.imageio.ImageIO; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; @@ -76,11 +77,10 @@ public class XSLFImageRendener { public boolean drawImage(Graphics2D graphics, XSLFPictureData data, Rectangle2D anchor) { try { - BufferedImage img = readImage(new ByteArrayInputStream(data.getData())); - if (img != null){ - graphics.drawImage(img, (int) anchor.getX(), (int) anchor.getY(), - (int) anchor.getWidth(), (int) anchor.getHeight(), null); - } + BufferedImage img = ImageIO.read(data.getPackagePart().getInputStream()); + graphics.drawImage(img, + (int) anchor.getX(), (int) anchor.getY(), + (int) anchor.getWidth(), (int) anchor.getHeight(), null); return true; } catch (Exception e) { return false; @@ -89,12 +89,13 @@ public class XSLFImageRendener { } /** - * create a buffered image from input stream + * Create a buffered image from the supplied package part. + * This method is called to create texture paints. * * @return a BufferedImage containing the decoded * contents of the input, or null. */ - public BufferedImage readImage(InputStream is) throws IOException { - return ImageIO.read(is); + public BufferedImage readImage(PackagePart packagePart) throws IOException { + return ImageIO.read(packagePart.getInputStream()); } } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java index 3025afcc40..ac4a4d2870 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java @@ -75,4 +75,9 @@ public final class XSLFNotes extends XSLFSheet { protected String getRootElementName(){ return "notes"; } + + @Override + public XSLFSheet getMasterSheet() { + return null; + } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java index 05813bdb96..77ebf05956 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotesMaster.java @@ -24,7 +24,6 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesMaster; import org.openxmlformats.schemas.presentationml.x2006.main.NotesMasterDocument; import java.io.IOException; -import java.util.Map; /** * Notes master object associated with this layout. @@ -45,8 +44,6 @@ import java.util.Map; @Beta public class XSLFNotesMaster extends XSLFSheet { private CTNotesMaster _slide; - private Map _layouts; - private XSLFTheme _theme; XSLFNotesMaster() { super(); @@ -70,4 +67,10 @@ import java.util.Map; protected String getRootElementName(){ return "notesMaster"; } + + @Override + public XSLFSheet getMasterSheet() { + return null; + } + } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java index 0ceb5c5636..445c16e9b0 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java @@ -33,12 +33,14 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTPicture; import org.openxmlformats.schemas.presentationml.x2006.main.CTPictureNonVisual; import javax.imageio.ImageIO; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; /** + * Represents a picture shape + * * @author Yegor Kozlov */ @Beta @@ -114,37 +116,14 @@ public class XSLFPictureShape extends XSLFSimpleShape { } @Override - public void draw(Graphics2D graphics){ - java.awt.Shape outline = getOutline(); - - // shadow - XSLFShadow shadow = getShadow(); - - Paint fill = getFill(graphics); - Paint line = getLinePaint(graphics); - if(shadow != null) { - shadow.draw(graphics); - } - - if(fill != null) { - graphics.setPaint(fill); - graphics.fill(outline); - } - + public void drawContent(Graphics2D graphics) { XSLFPictureData data = getPictureData(); if(data == null) return; - + XSLFImageRendener renderer = (XSLFImageRendener)graphics.getRenderingHint(XSLFRenderingHint.IMAGE_RENDERER); if(renderer == null) renderer = new XSLFImageRendener(); renderer.drawImage(graphics, data, getAnchor()); - - if (line != null){ - graphics.setPaint(line); - applyStroke(graphics); - graphics.draw(outline); - } } - } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRenderingHint.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRenderingHint.java index cc0df0fbfd..345d57c4b3 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRenderingHint.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFRenderingHint.java @@ -19,7 +19,7 @@ package org.apache.poi.xslf.usermodel; -import java.awt.*; +import java.awt.RenderingHints; /** * @@ -38,5 +38,37 @@ public class XSLFRenderingHint extends RenderingHints.Key { public static final XSLFRenderingHint GSAVE = new XSLFRenderingHint(1); public static final XSLFRenderingHint GRESTORE = new XSLFRenderingHint(2); + + /** + * Use a custom image rendener + * + * @see XSLFImageRendener + */ public static final XSLFRenderingHint IMAGE_RENDERER = new XSLFRenderingHint(3); + + /** + * how to render text: + * + * {@link #TEXT_MODE_CHARACTERS} (default) means to draw via + * {@link java.awt.Graphics2D#drawString(java.text.AttributedCharacterIterator, float, float)}. + * This mode draws text as characters. Use it if the target graphics writes the actual + * character codes instead of glyph outlines (PDFGraphics2D, SVGGraphics2D, etc.) + * + * {@link #TEXT_MODE_GLYPHS} means to render via + * {@link java.awt.font.TextLayout#draw(java.awt.Graphics2D, float, float)}. + * This mode draws glyphs as shapes and provides some advanced capabilities such as + * justification and font substitution. Use it if the target graphics is an image. + * + */ + public static final XSLFRenderingHint TEXT_RENDERING_MODE = new XSLFRenderingHint(4); + + /** + * draw text via {@link java.awt.Graphics2D#drawString(java.text.AttributedCharacterIterator, float, float)} + */ + public static final int TEXT_MODE_CHARACTERS = 1; + + /** + * draw text via {@link java.awt.font.TextLayout#draw(java.awt.Graphics2D, float, float)} + */ + public static final int TEXT_MODE_GLYPHS = 2; } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java index 8838fa3e41..70d42ce5c3 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShadow.java @@ -19,8 +19,11 @@ package org.apache.poi.xslf.usermodel; import org.apache.poi.util.Units; import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; -import java.awt.*; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; import java.awt.geom.Rectangle2D; /** @@ -37,36 +40,44 @@ public class XSLFShadow extends XSLFSimpleShape { _parent = parentShape; } - @Override - public void draw(Graphics2D graphics) { - Shape outline = _parent.getOutline(); - Paint parentFillColor = _parent.getFill(graphics); - Paint parentLineColor = _parent.getLinePaint(graphics); + public void fill(Graphics2D graphics, Shape outline) { double angle = getAngle(); double dist = getDistance(); - double dx = dist * Math.cos( Math.toRadians(angle)); - double dy = dist * Math.sin( Math.toRadians(angle)); + double dx = dist * Math.cos(Math.toRadians(angle)); + double dy = dist * Math.sin(Math.toRadians(angle)); graphics.translate(dx, dy); Color fillColor = getFillColor(); if (fillColor != null) { graphics.setColor(fillColor); + graphics.fill(outline); } - if(parentFillColor != null) { - graphics.fill(outline); - } - if(parentLineColor != null) { - _parent.applyStroke(graphics); - graphics.draw(outline); - } + graphics.translate(-dx, -dy); + } + + public void draw(Graphics2D graphics, Shape outline) { + + double angle = getAngle(); + double dist = getDistance(); + double dx = dist * Math.cos(Math.toRadians(angle)); + double dy = dist * Math.sin(Math.toRadians(angle)); + + graphics.translate(dx, dy); + + Color fillColor = getFillColor(); + if (fillColor != null) { + graphics.setColor(fillColor); + graphics.draw(outline); + } graphics.translate(-dx, -dy); } + @Override public Rectangle2D getAnchor(){ return _parent.getAnchor(); @@ -112,6 +123,11 @@ public class XSLFShadow extends XSLFSimpleShape { public Color getFillColor() { XSLFTheme theme = getSheet().getTheme(); CTOuterShadowEffect ct = (CTOuterShadowEffect)getXmlObject(); - return ct == null ? null : new XSLFColor(ct, theme).getColor(); + if(ct == null) { + return null; + } else { + CTSchemeColor phClr = ct.getSchemeClr(); + return new XSLFColor(ct, theme, phClr).getColor(); + } } } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java index 992973c518..9ff619257c 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java @@ -22,24 +22,54 @@ package org.apache.poi.xslf.usermodel; import org.apache.poi.util.Beta; import org.apache.xmlbeans.XmlObject; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; /** + * Base super-class class for all shapes in PresentationML + * * @author Yegor Kozlov */ @Beta public abstract class XSLFShape { - + /** + * + * @return the position of this shape within the drawing canvas. + * The coordinates are expressed in points + */ public abstract Rectangle2D getAnchor(); + /** + * + * @param anchor the position of this shape within the drawing canvas. + * The coordinates are expressed in points + */ public abstract void setAnchor(Rectangle2D anchor); + /** + * + * @return the xml bean holding this shape's data + */ public abstract XmlObject getXmlObject(); + /** + * + * @return human-readable name of this shape, e.g. "Rectange 3" + */ public abstract String getShapeName(); + /** + * Returns a unique identifier for this shape within the current document. + * This ID may be used to assist in uniquely identifying this object so that it can + * be referred to by other parts of the document. + *

+ * If multiple objects within the same document share the same id attribute value, + * then the document shall be considered non-conformant. + *

+ * + * @return unique id of this shape + */ public abstract int getShapeId(); /** @@ -64,8 +94,16 @@ public abstract class XSLFShape { */ public abstract double getRotation(); + /** + * @param flip whether the shape is horizontally flipped + */ public abstract void setFlipHorizontal(boolean flip); + /** + * Whether the shape is vertically flipped + * + * @param flip whether the shape is vertically flipped + */ public abstract void setFlipVertical(boolean flip); /** @@ -75,14 +113,25 @@ public abstract class XSLFShape { */ public abstract boolean getFlipHorizontal(); + /** + * Whether the shape is vertically flipped + * + * @return whether the shape is vertically flipped + */ public abstract boolean getFlipVertical(); + /** + * Draw this shape into the supplied canvas + * + * @param graphics the graphics to draw into + */ public abstract void draw(Graphics2D graphics); - protected java.awt.Shape getOutline(){ - return getAnchor(); - } - + /** + * Apply 2-D transforms before drawing this shape. This includes rotation and flipping. + * + * @param graphics the graphics whos transform matrix will be modified + */ protected void applyTransform(Graphics2D graphics){ Rectangle2D anchor = getAnchor(); @@ -112,5 +161,5 @@ public abstract class XSLFShape { graphics.translate(-anchor.getX(), -anchor.getY()); } } - + } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java index 87da995d49..964df2df96 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java @@ -21,9 +21,9 @@ import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.openxml4j.opc.TargetMode; import org.apache.poi.util.Beta; +import org.apache.poi.util.Internal; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextListStyle; import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData; import org.openxmlformats.schemas.presentationml.x2006.main.CTConnector; @@ -34,22 +34,25 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; import javax.xml.namespace.QName; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @Beta -public abstract class XSLFSheet extends POIXMLDocumentPart { +public abstract class XSLFSheet extends POIXMLDocumentPart implements Iterable { private XSLFCommonSlideData _commonSlideData; private XSLFDrawing _drawing; private List _shapes; private CTGroupShape _spTree; + + private List_placeholders; private Map _placeholderByIdMap; private Map _placeholderByTypeMap; @@ -61,6 +64,10 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { super(part, rel); } + /** + * + * @return the XMLSlideShow this sheet belongs to + */ public XMLSlideShow getSlideShow() { POIXMLDocumentPart p = getParent(); while(p != null) { @@ -69,7 +76,7 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { } p = p.getParent(); } - return null; + throw new IllegalStateException("SlideShow was not found"); } protected List buildShapes(CTGroupShape spTree){ @@ -92,11 +99,16 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { return shapes; } + /** + * @return top-level Xml bean representing this sheet + */ public abstract XmlObject getXmlObject(); + @Internal public XSLFCommonSlideData getCommonSlideData() { return _commonSlideData; } + protected void setCommonSlideData(CTCommonSlideData data) { if(data == null) { _commonSlideData = null; @@ -180,10 +192,34 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { return sh; } + /** + * Returns an array containing all of the shapes in this sheet + * + * @return an array of all shapes in this sheet + */ public XSLFShape[] getShapes(){ return getShapeList().toArray(new XSLFShape[_shapes.size()]); } + /** + * Returns an iterator over the shapes in this sheet + * + * @return an iterator over the shapes in this sheet + */ + public Iterator iterator(){ + return getShapeList().iterator(); + } + + /** + * Removes the specified shape from this sheet, if it is present + * (optional operation). If this sheet does not contain the element, + * it is unchanged. + * + * @param xShape shape to be removed from this sheet, if present + * @return true if this sheet contained the specified element + * @throws IllegalArgumentException if the type of the specified shape + * is incompatible with this sheet (optional) + */ public boolean removeShape(XSLFShape xShape) { XmlObject obj = xShape.getXmlObject(); CTGroupShape spTree = getSpTree(); @@ -199,10 +235,6 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { return getShapeList().remove(xShape); } - public XSLFBackground getBackground(){ - return null; - } - protected abstract String getRootElementName(); protected CTGroupShape getSpTree(){ @@ -248,22 +280,22 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { getXmlObject().set(src.getXmlObject()); } - public XSLFTheme getTheme(){ - return null; - } - - public XSLFSlideMaster getSlideMaster(){ + /** + * @return theme (shared styles) associated with this theme. + * By default returns null which means that this sheet is theme-less. + * Sheets that support the notion of themes (slides, masters, layouts, etc.) should override this + * method and return the corresposnding package part. + */ + XSLFTheme getTheme(){ return null; } - public XSLFSlideLayout getSlideLayout(){ - return null; - } + /** + * + * @return master of this sheet. + */ + public abstract XSLFSheet getMasterSheet(); - protected CTTextListStyle getTextProperties(Placeholder textType) { - return null; - } - protected XSLFTextShape getTextShapeByType(Placeholder type){ for(XSLFShape shape : this.getShapes()){ if(shape instanceof XSLFTextShape) { @@ -286,72 +318,107 @@ public abstract class XSLFSheet extends POIXMLDocumentPart { return shape; } - XSLFSimpleShape getPlaceholderById(int id) { - if(_placeholderByIdMap == null) { + void initPlaceholders() { + if(_placeholders == null) { + _placeholders = new ArrayList(); _placeholderByIdMap = new HashMap(); + _placeholderByTypeMap = new HashMap(); + for(XSLFShape sh : getShapes()){ - if(sh instanceof XSLFSimpleShape){ - XSLFSimpleShape sShape = (XSLFSimpleShape)sh; + if(sh instanceof XSLFTextShape){ + XSLFTextShape sShape = (XSLFTextShape)sh; CTPlaceholder ph = sShape.getCTPlaceholder(); - if(ph != null && ph.isSetIdx()){ - int idx = (int)ph.getIdx(); - _placeholderByIdMap.put(idx, sShape); + if(ph != null) { + _placeholders.add(sShape); + if(ph.isSetIdx()) { + int idx = (int)ph.getIdx(); + _placeholderByIdMap.put(idx, sShape); + } + if(ph.isSetType()){ + _placeholderByTypeMap.put(ph.getType().intValue(), sShape); + } } } } } + } + + XSLFSimpleShape getPlaceholderById(int id) { + initPlaceholders(); return _placeholderByIdMap.get(id); } XSLFSimpleShape getPlaceholderByType(int ordinal) { - if(_placeholderByTypeMap == null) { - _placeholderByTypeMap = new HashMap(); - for(XSLFShape sh : getShapes()){ - if(sh instanceof XSLFSimpleShape){ - XSLFSimpleShape sShape = (XSLFSimpleShape)sh; - CTPlaceholder ph = sShape.getCTPlaceholder(); - if(ph != null && ph.isSetType()){ - _placeholderByTypeMap.put(ph.getType().intValue(), sShape); - } - } - } - } + initPlaceholders(); return _placeholderByTypeMap.get(ordinal); } + /** + * + * @param idx 0-based index of a placeholder in the sheet + * @return placeholder + */ + public XSLFTextShape getPlaceholder(int idx) { + initPlaceholders(); + return _placeholders.get(idx); + } + + /** + * + * @return all placeholder shapes in this sheet + */ + public XSLFTextShape[] getPlaceholders() { + initPlaceholders(); + return _placeholders.toArray(new XSLFTextShape[_placeholders.size()]); + } + /** * Checks if this sheet displays the specified shape. * - * Subclasses can override it and skip certain shapes from drawings. + * Subclasses can override it and skip certain shapes from drawings, + * for instance, slide masters and layouts don't display placeholders */ protected boolean canDraw(XSLFShape shape){ return true; } + /** + * + * @return whether shapes on the master sheet should be shown. By default master graphics is turned off. + * Sheets that support the notion of master (slide, slideLayout) should override it and + * check this setting in the sheet XML + */ + public boolean getFollowMasterGraphics(){ + return false; + } + /** * Render this sheet into the supplied graphics object * * @param graphics */ public void draw(Graphics2D graphics){ - XSLFBackground bg = getBackground(); - if(bg != null) bg.draw(graphics); + XSLFSheet master = getMasterSheet(); + if(getFollowMasterGraphics() && master != null) master.draw(graphics); for(XSLFShape shape : getShapeList()) { if(!canDraw(shape)) continue; // remember the initial transform and restore it after we are done with drawing - AffineTransform at0 = graphics.getTransform(); + AffineTransform at = graphics.getTransform(); + // concrete implementations can make sense of this hint, + // for example PSGraphics2D or PDFGraphics2D would call gsave() / grestore graphics.setRenderingHint(XSLFRenderingHint.GSAVE, true); // apply rotation and flipping shape.applyTransform(graphics); - + // draw stuff shape.draw(graphics); // restore the coordinate system - graphics.setTransform(at0); + graphics.setTransform(at); + graphics.setRenderingHint(XSLFRenderingHint.GRESTORE, true); } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java index 10bad70d03..c67f39e793 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSimpleShape.java @@ -19,8 +19,6 @@ package org.apache.poi.xslf.usermodel; -import org.apache.poi.openxml4j.opc.PackagePart; -import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.util.Beta; import org.apache.poi.util.Units; import org.apache.poi.xslf.model.PropertyFetcher; @@ -28,36 +26,50 @@ import org.apache.poi.xslf.model.geom.Context; import org.apache.poi.xslf.model.geom.CustomGeometry; import org.apache.poi.xslf.model.geom.Guide; import org.apache.poi.xslf.model.geom.IAdjustableShape; +import org.apache.poi.xslf.model.geom.Outline; import org.apache.poi.xslf.model.geom.Path; import org.apache.poi.xslf.model.geom.PresetGeometries; import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.main.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTEffectStyleItem; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGeomGuide; +import org.openxmlformats.schemas.drawingml.x2006.main.CTLineProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; +import org.openxmlformats.schemas.drawingml.x2006.main.CTOuterShadowEffect; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetGeometry2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPresetLineDashProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTStyleMatrix; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; +import org.openxmlformats.schemas.drawingml.x2006.main.STLineCap; +import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal; +import org.openxmlformats.schemas.drawingml.x2006.main.STShapeType; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.GeneralPath; -import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; -import java.awt.image.BufferedImage; -import java.awt.Paint; -import java.awt.Graphics2D; -import java.awt.Color; -import java.awt.TexturePaint; -import java.awt.AlphaComposite; -import java.awt.GradientPaint; -import java.awt.BasicStroke; -import java.awt.Stroke; -import java.util.Arrays; -import java.util.Comparator; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Constructor; +import java.util.Collection; +import java.util.Collections; +import java.util.List; /** + * Represents a single (non-group) shape in a .pptx slide show + * * @author Yegor Kozlov */ @Beta public abstract class XSLFSimpleShape extends XSLFShape { + private final XmlObject _shape; private final XSLFSheet _sheet; private CTShapeProperties _spPr; @@ -70,10 +82,15 @@ public abstract class XSLFSimpleShape extends XSLFShape { _sheet = sheet; } + @Override public XmlObject getXmlObject() { return _shape; } + /** + * + * @return the sheet this shape belongs to + */ public XSLFSheet getSheet() { return _sheet; } @@ -88,10 +105,12 @@ public abstract class XSLFSimpleShape extends XSLFShape { return stEnum == null ? 0 : stEnum.intValue(); } + @Override public String getShapeName() { return getNvPr().getName(); } + @Override public int getShapeId() { return (int) getNvPr().getId(); } @@ -132,22 +151,22 @@ public abstract class XSLFSimpleShape extends XSLFShape { return _spStyle; } - protected CTPlaceholder getCTPlaceholder(){ - if(_ph == null){ + protected CTPlaceholder getCTPlaceholder() { + if (_ph == null) { XmlObject[] obj = _shape.selectPath( "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' .//*/p:nvPr/p:ph"); - if(obj.length == 1){ - _ph = (CTPlaceholder)obj[0]; + if (obj.length == 1) { + _ph = (CTPlaceholder) obj[0]; } } return _ph; } - private CTTransform2D getXfrm(){ - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ + private CTTransform2D getXfrm() { + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { CTShapeProperties pr = shape.getSpPr(); - if(pr.isSetXfrm()){ + if (pr.isSetXfrm()) { setValue(pr.getXfrm()); return true; } @@ -158,10 +177,11 @@ public abstract class XSLFSimpleShape extends XSLFShape { return fetcher.getValue(); } + @Override public Rectangle2D getAnchor() { CTTransform2D xfrm = getXfrm(); - + CTPoint2D off = xfrm.getOff(); long x = off.getX(); long y = off.getY(); @@ -173,6 +193,7 @@ public abstract class XSLFSimpleShape extends XSLFShape { Units.toPoints(cx), Units.toPoints(cy)); } + @Override public void setAnchor(Rectangle2D anchor) { CTShapeProperties spPr = getSpPr(); CTTransform2D xfrm = spPr.isSetXfrm() ? spPr.getXfrm() : spPr.addNewXfrm(); @@ -189,64 +210,46 @@ public abstract class XSLFSimpleShape extends XSLFShape { ext.setCy(cy); } - /** - * Rotate this shape. - *

- * Positive angles are clockwise (i.e., towards the positive y axis); - * negative angles are counter-clockwise (i.e., towards the negative y - * axis). - *

- * - * @param theta the rotation angle in degrees. - */ + @Override public void setRotation(double theta) { CTShapeProperties spPr = getSpPr(); CTTransform2D xfrm = spPr.isSetXfrm() ? spPr.getXfrm() : spPr.addNewXfrm(); xfrm.setRot((int) (theta * 60000)); } - /** - * Rotation angle in degrees - *

- * Positive angles are clockwise (i.e., towards the positive y axis); - * negative angles are counter-clockwise (i.e., towards the negative y - * axis). - *

- * - * @return rotation angle in degrees - */ + @Override public double getRotation() { CTTransform2D xfrm = getXfrm(); return (double) xfrm.getRot() / 60000; } + @Override public void setFlipHorizontal(boolean flip) { CTShapeProperties spPr = getSpPr(); CTTransform2D xfrm = spPr.isSetXfrm() ? spPr.getXfrm() : spPr.addNewXfrm(); xfrm.setFlipH(flip); } + @Override public void setFlipVertical(boolean flip) { CTShapeProperties spPr = getSpPr(); CTTransform2D xfrm = spPr.isSetXfrm() ? spPr.getXfrm() : spPr.addNewXfrm(); xfrm.setFlipV(flip); } - /** - * Whether the shape is horizontally flipped - * - * @return whether the shape is horizontally flipped - */ + @Override public boolean getFlipHorizontal() { return getXfrm().getFlipH(); } + @Override public boolean getFlipVertical() { return getXfrm().getFlipV(); } /** - * Get line properties defined in the theme (if any) + * Get default line properties defined in the theme (if any). + * Used internally to resolve shape properties. * * @return line propeties from the theme of null */ @@ -262,6 +265,10 @@ public abstract class XSLFSimpleShape extends XSLFShape { return ln; } + /** + * @param color the color to paint the shape outline. + * A null value turns off the shape outline. + */ public void setLineColor(Color color) { CTShapeProperties spPr = getSpPr(); if (color == null) { @@ -281,48 +288,24 @@ public abstract class XSLFSimpleShape extends XSLFShape { } } + /** + * + * @return the color of the shape outline or null + * if outline is turned off + */ public Color getLineColor() { - Paint paint = getLinePaint(null); - if(paint instanceof Color){ - return (Color)paint; + RenderableShape rShape = new RenderableShape(this); + Paint paint = rShape.getLinePaint(null); + if (paint instanceof Color) { + return (Color) paint; } return null; } - public Paint getLinePaint(final Graphics2D graphics) { - final XSLFTheme theme = _sheet.getTheme(); - final Color nofill = new Color(0,0,0,0); - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ - CTLineProperties spPr = shape.getSpPr().getLn(); - if (spPr != null) { - if (spPr.isSetNoFill()) { - setValue(nofill); // use it as 'nofill' value - return true; - } - Paint paint = getPaint(graphics, spPr); - if (paint != null) { - setValue( paint ); - return true; - } - } - return false; - - } - }; - fetchShapeProperty(fetcher); - - Paint color = fetcher.getValue(); - if(color == null){ - // line color was not found, check if it is defined in the theme - CTShapeStyle style = getSpStyle(); - if (style != null) { - color = new XSLFColor(style.getLnRef(), theme).getColor(); - } - } - return color == nofill ? null : color; - } - + /** + * + * @param width line width in points. 0 means no line + */ public void setLineWidth(double width) { CTShapeProperties spPr = getSpPr(); if (width == 0.) { @@ -335,9 +318,13 @@ public abstract class XSLFSimpleShape extends XSLFShape { } } + /** + * + * @return line width in points. 0 means no line. + */ public double getLineWidth() { - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { CTShapeProperties spPr = shape.getSpPr(); CTLineProperties ln = spPr.getLn(); if (ln != null) { @@ -347,7 +334,7 @@ public abstract class XSLFSimpleShape extends XSLFShape { } if (ln.isSetW()) { - setValue( Units.toPoints(ln.getW()) ); + setValue(Units.toPoints(ln.getW())); return true; } } @@ -357,7 +344,7 @@ public abstract class XSLFSimpleShape extends XSLFShape { fetchShapeProperty(fetcher); double lineWidth = 0; - if(fetcher.getValue() == null) { + if (fetcher.getValue() == null) { CTLineProperties defaultLn = getDefaultLineProperties(); if (defaultLn != null) { if (defaultLn.isSetW()) lineWidth = Units.toPoints(defaultLn.getW()); @@ -369,6 +356,10 @@ public abstract class XSLFSimpleShape extends XSLFShape { return lineWidth; } + /** + * + * @param dash a preset line dashing scheme to stroke thr shape outline + */ public void setLineDash(LineDash dash) { CTShapeProperties spPr = getSpPr(); if (dash == null) { @@ -384,16 +375,19 @@ public abstract class XSLFSimpleShape extends XSLFShape { } } + /** + * @return a preset line dashing scheme to stroke thr shape outline + */ public LineDash getLineDash() { - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { CTShapeProperties spPr = shape.getSpPr(); CTLineProperties ln = spPr.getLn(); if (ln != null) { CTPresetLineDashProperties ctDash = ln.getPrstDash(); if (ctDash != null) { - setValue( LineDash.values()[ctDash.getVal().intValue() - 1] ); + setValue(LineDash.values()[ctDash.getVal().intValue() - 1]); return true; } } @@ -403,7 +397,7 @@ public abstract class XSLFSimpleShape extends XSLFShape { fetchShapeProperty(fetcher); LineDash dash = fetcher.getValue(); - if(dash == null){ + if (dash == null) { CTLineProperties defaultLn = getDefaultLineProperties(); if (defaultLn != null) { CTPresetLineDashProperties ctDash = defaultLn.getPrstDash(); @@ -415,6 +409,10 @@ public abstract class XSLFSimpleShape extends XSLFShape { return dash; } + /** + * + * @param cap the line end cap style + */ public void setLineCap(LineCap cap) { CTShapeProperties spPr = getSpPr(); if (cap == null) { @@ -427,15 +425,19 @@ public abstract class XSLFSimpleShape extends XSLFShape { } } + /** + * + * @return the line end cap style + */ public LineCap getLineCap() { - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { CTShapeProperties spPr = shape.getSpPr(); CTLineProperties ln = spPr.getLn(); if (ln != null) { STLineCap.Enum stCap = ln.getCap(); if (stCap != null) { - setValue( LineCap.values()[stCap.intValue() - 1] ); + setValue(LineCap.values()[stCap.intValue() - 1]); return true; } } @@ -445,7 +447,7 @@ public abstract class XSLFSimpleShape extends XSLFShape { fetchShapeProperty(fetcher); LineCap cap = fetcher.getValue(); - if(cap == null){ + if (cap == null) { CTLineProperties defaultLn = getDefaultLineProperties(); if (defaultLn != null) { STLineCap.Enum stCap = defaultLn.getCap(); @@ -469,10 +471,10 @@ public abstract class XSLFSimpleShape extends XSLFShape { if (color == null) { if (spPr.isSetSolidFill()) spPr.unsetSolidFill(); - if(!spPr.isSetNoFill()) spPr.addNewNoFill(); + if (!spPr.isSetNoFill()) spPr.addNewNoFill(); } else { - if(spPr.isSetNoFill()) spPr.unsetNoFill(); - + if (spPr.isSetNoFill()) spPr.unsetNoFill(); + CTSolidColorFillProperties fill = spPr.isSetSolidFill() ? spPr .getSolidFill() : spPr.addNewSolidFill(); @@ -485,55 +487,24 @@ public abstract class XSLFSimpleShape extends XSLFShape { } /** - * @return solid fill color of null if not set + * @return solid fill color of null if not set or fill color + * is not solid (pattern or gradient) */ public Color getFillColor() { - Paint paint = getFill(null); - if(paint instanceof Color){ - return (Color)paint; + RenderableShape rShape = new RenderableShape(this); + Paint paint = rShape.getFillPaint(null); + if (paint instanceof Color) { + return (Color) paint; } return null; } /** - * fetch shape fill as a java.awt.Paint - * - * @return either Color or GradientPaint or TexturePaint or null + * @return shadow of this shape or null if shadow is disabled */ - Paint getFill(final Graphics2D graphics) { - final XSLFTheme theme = _sheet.getTheme(); - final Color nofill = new Color(0xFF,0xFF,0xFF, 0); - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ - CTShapeProperties spPr = shape.getSpPr(); - if (spPr.isSetNoFill()) { - setValue(nofill); // use it as 'nofill' value - return true; - } - Paint paint = getPaint(graphics, spPr); - if (paint != null) { - setValue( paint ); - return true; - } - return false; - } - }; - fetchShapeProperty(fetcher); - - Paint paint = fetcher.getValue(); - if(paint == null){ - // fill color was not found, check if it is defined in the theme - CTShapeStyle style = getSpStyle(); - if (style != null) { - paint = new XSLFColor(style.getFillRef(), theme).getColor(); - } - } - return paint == nofill ? null : paint; - } - - public XSLFShadow getShadow(){ - PropertyFetcher fetcher = new PropertyFetcher(){ - public boolean fetch(XSLFSimpleShape shape){ + public XSLFShadow getShadow() { + PropertyFetcher fetcher = new PropertyFetcher() { + public boolean fetch(XSLFSimpleShape shape) { CTShapeProperties spPr = shape.getSpPr(); if (spPr.isSetEffectLst()) { CTOuterShadowEffect obj = spPr.getEffectLst().getOuterShdw(); @@ -546,233 +517,48 @@ public abstract class XSLFSimpleShape extends XSLFShape { fetchShapeProperty(fetcher); CTOuterShadowEffect obj = fetcher.getValue(); - if(obj == null){ + if (obj == null) { // fill color was not found, check if it is defined in the theme CTShapeStyle style = getSpStyle(); if (style != null) { // 1-based index of a shadow style within the style matrix int idx = (int) style.getEffectRef().getIdx(); - - CTStyleMatrix styleMatrix = _sheet.getTheme().getXmlObject().getThemeElements().getFmtScheme(); - CTEffectStyleItem ef = styleMatrix.getEffectStyleLst().getEffectStyleArray(idx - 1); - obj = ef.getEffectLst().getOuterShdw(); + if(idx != 0) { + CTStyleMatrix styleMatrix = _sheet.getTheme().getXmlObject().getThemeElements().getFmtScheme(); + CTEffectStyleItem ef = styleMatrix.getEffectStyleLst().getEffectStyleArray(idx - 1); + obj = ef.getEffectLst().getOuterShdw(); + } } } return obj == null ? null : new XSLFShadow(obj, this); } + @Override public void draw(Graphics2D graphics) { - - } - - @SuppressWarnings("deprecation") // getXYZArray() array accessors are deprecated - protected Paint getPaint(Graphics2D graphics, XmlObject spPr) { - XSLFTheme theme = getSheet().getTheme(); - Rectangle2D anchor = getAnchor(); - - Paint paint = null; - for(XmlObject obj : spPr.selectPath("*")){ - if(obj instanceof CTNoFillProperties){ - paint = null; - break; - } - if(obj instanceof CTSolidColorFillProperties){ - CTSolidColorFillProperties solidFill = (CTSolidColorFillProperties)obj; - XSLFColor c = new XSLFColor(solidFill, theme); - paint = c.getColor(); - } - if(obj instanceof CTBlipFillProperties){ - CTBlipFillProperties blipFill = (CTBlipFillProperties)obj; - CTBlip blip = blipFill.getBlip(); - String blipId = blip.getEmbed(); - PackagePart p = getSheet().getPackagePart(); - PackageRelationship rel = p.getRelationship(blipId); - if (rel != null) { - XSLFImageRendener renderer = null; - if(graphics != null) renderer = (XSLFImageRendener)graphics.getRenderingHint(XSLFRenderingHint.IMAGE_RENDERER); - if(renderer == null) renderer = new XSLFImageRendener(); - - try { - BufferedImage img = renderer.readImage(p.getRelatedPart(rel).getInputStream()); - if(blip.sizeOfAlphaModFixArray() > 0){ - float alpha = blip.getAlphaModFixArray(0).getAmt()/100000.f; - AlphaComposite ac = AlphaComposite.getInstance( - AlphaComposite.SRC_OVER, alpha); - if(graphics != null) graphics.setComposite(ac); - } - - paint = new TexturePaint( - img, new Rectangle2D.Double(0, 0, img.getWidth(), img.getHeight())); - } - catch (Exception e) { - return null; - } - } - } - if(obj instanceof CTGradientFillProperties){ - CTGradientFillProperties gradFill = (CTGradientFillProperties)obj; - double angle; - if(gradFill.isSetLin()) { - angle = gradFill.getLin().getAng() / 60000; - } else { - // XSLF only supports linear gradient fills. Other types are filled as liner with angle=90 degrees - angle = 90; - } - CTGradientStop[] gs = gradFill.getGsLst().getGsArray(); - - Arrays.sort(gs, new Comparator(){ - public int compare(CTGradientStop o1, CTGradientStop o2){ - Integer pos1 = o1.getPos(); - Integer pos2 = o2.getPos(); - return pos1.compareTo(pos2); - } - }); - - Color[] colors = new Color[gs.length]; - float[] fractions = new float[gs.length]; - - AffineTransform at = AffineTransform.getRotateInstance( - Math.toRadians(angle), - anchor.getX() + anchor.getWidth()/2, - anchor.getY() + anchor.getHeight()/2); - - double diagonal = Math.sqrt(anchor.getHeight()*anchor.getHeight() + anchor.getWidth()*anchor.getWidth()); - Point2D p1 = new Point2D.Double(anchor.getX() + anchor.getWidth()/2 - diagonal/2, - anchor.getY() + anchor.getHeight()/2); - p1 = at.transform(p1, null); - - Point2D p2 = new Point2D.Double(anchor.getX() + anchor.getWidth(), anchor.getY() + anchor.getHeight()/2); - p2 = at.transform(p2, null); - - norm(p1, anchor); - norm(p2, anchor); - - for(int i = 0; i < gs.length; i++){ - CTGradientStop stop = gs[i]; - colors[i] = new XSLFColor(stop, theme).getColor(); - fractions[i] = stop.getPos() / 100000.f; - } - - paint = createGradientPaint(p1, p2, fractions, colors); - } - } - return paint; - } - - /** - * Trick to return GradientPaint on JDK 1.5 and LinearGradientPaint on JDK 1.6+ - */ - private Paint createGradientPaint(Point2D p1, Point2D p2, float[] fractions, Color[] colors){ - Paint paint; - try { - Class clz = Class.forName("java.awt.LinearGradientPaint"); - Constructor c = - clz.getConstructor(Point2D.class, Point2D.class, float[].class, Color[].class); - paint = (Paint)c.newInstance(p1, p2, fractions, colors); - } catch (ClassNotFoundException e){ - paint = new GradientPaint(p1, colors[0], p2, colors[colors.length - 1]); - } catch (Exception e){ - throw new RuntimeException(e); - } - return paint; - } - - void norm(Point2D p, Rectangle2D anchor){ - if(p.getX() < anchor.getX()){ - p.setLocation(anchor.getX(), p.getY()); - } else if(p.getX() > (anchor.getX() + anchor.getWidth())){ - p.setLocation(anchor.getX() + anchor.getWidth(), p.getY()); - } - - if(p.getY() < anchor.getY()){ - p.setLocation(p.getX(), anchor.getY()); - } else if (p.getY() > (anchor.getY() + anchor.getHeight())){ - p.setLocation(p.getX(), anchor.getY() + anchor.getHeight()); - } - } - - protected float[] getDashPattern(LineDash lineDash, float lineWidth) { - float[] dash = null; - switch (lineDash) { - case SYS_DOT: - dash = new float[]{lineWidth, lineWidth}; - break; - case SYS_DASH: - dash = new float[]{2 * lineWidth, 2 * lineWidth}; - break; - case DASH: - dash = new float[]{3 * lineWidth, 4 * lineWidth}; - break; - case DASH_DOT: - dash = new float[]{4 * lineWidth, 3 * lineWidth, lineWidth, - 3 * lineWidth}; - break; - case LG_DASH: - dash = new float[]{8 * lineWidth, 3 * lineWidth}; - break; - case LG_DASH_DOT: - dash = new float[]{8 * lineWidth, 3 * lineWidth, lineWidth, - 3 * lineWidth}; - break; - case LG_DASH_DOT_DOT: - dash = new float[]{8 * lineWidth, 3 * lineWidth, lineWidth, - 3 * lineWidth, lineWidth, 3 * lineWidth}; - break; - } - return dash; + RenderableShape rShape = new RenderableShape(this); + rShape.render(graphics); } - protected void applyStroke(Graphics2D graphics) { - - float lineWidth = (float) getLineWidth(); - LineDash lineDash = getLineDash(); - float[] dash = null; - float dash_phase = 0; - if (lineDash != null) { - dash = getDashPattern(lineDash, lineWidth); - } - - int cap = BasicStroke.CAP_BUTT; - LineCap lineCap = getLineCap(); - if (lineCap != null) { - switch (lineCap) { - case ROUND: - cap = BasicStroke.CAP_ROUND; - break; - case SQUARE: - cap = BasicStroke.CAP_SQUARE; - break; - default: - cap = BasicStroke.CAP_BUTT; - break; - } - } - - int meter = BasicStroke.JOIN_ROUND; - - Stroke stroke = new BasicStroke(lineWidth, cap, meter, Math.max(1, lineWidth), dash, - dash_phase); - graphics.setStroke(stroke); - } /** - * Walk up the inheritance tree and fetch properties. - * - * slide <-- slideLayout <-- slideMaster + * Walk up the inheritance tree and fetch shape properties. * + * The following order of inheritance is assumed: + *

+ * slide <-- slideLayout <-- slideMaster <-- default styles in the slideMaster + *

* - * @param visitor the object that collects the desired property + * @param visitor the object that collects the desired property * @return true if the property was fetched */ - boolean fetchShapeProperty(PropertyFetcher visitor){ + boolean fetchShapeProperty(PropertyFetcher visitor) { boolean ok = visitor.fetch(this); XSLFSimpleShape masterShape; - if(!ok){ - - // first try to fetch from the slide layout - XSLFSlideLayout layout = getSheet().getSlideLayout(); - if(layout != null) { + XSLFSheet layout = getSheet().getMasterSheet(); + if (layout != null) { + if (!ok) { + // first try to fetch from the slide layout CTPlaceholder ph = getCTPlaceholder(); if (ph != null) { masterShape = layout.getPlaceholder(ph); @@ -781,96 +567,77 @@ public abstract class XSLFSimpleShape extends XSLFShape { } } } - } - // try slide master - if (!ok) { - int textType; - CTPlaceholder ph = getCTPlaceholder(); - if(ph == null || !ph.isSetType()) textType = STPlaceholderType.INT_BODY; - else { - switch(ph.getType().intValue()){ - case STPlaceholderType.INT_TITLE: - case STPlaceholderType.INT_CTR_TITLE: - textType = STPlaceholderType.INT_TITLE; - break; - case STPlaceholderType.INT_FTR: - case STPlaceholderType.INT_SLD_NUM: - case STPlaceholderType.INT_DT: - textType = ph.getType().intValue(); - break; - default: - textType = STPlaceholderType.INT_BODY; - break; + // try slide master + if (!ok) { + int textType; + CTPlaceholder ph = getCTPlaceholder(); + if (ph == null || !ph.isSetType()) textType = STPlaceholderType.INT_BODY; + else { + switch (ph.getType().intValue()) { + case STPlaceholderType.INT_TITLE: + case STPlaceholderType.INT_CTR_TITLE: + textType = STPlaceholderType.INT_TITLE; + break; + case STPlaceholderType.INT_FTR: + case STPlaceholderType.INT_SLD_NUM: + case STPlaceholderType.INT_DT: + textType = ph.getType().intValue(); + break; + default: + textType = STPlaceholderType.INT_BODY; + break; + } } - } - XSLFSlideMaster master = getSheet().getSlideMaster(); - if(master != null) { - masterShape = master.getPlaceholderByType(textType); - if (masterShape != null) { - ok = visitor.fetch(masterShape); + XSLFSheet master = layout.getMasterSheet(); + if (master != null) { + masterShape = master.getPlaceholderByType(textType); + if (masterShape != null) { + ok = visitor.fetch(masterShape); + } } } } - return ok; } - - @Override - protected java.awt.Shape getOutline(){ - PresetGeometries dict = PresetGeometries.getInstance(); + /** + * + * @return definition of the shape geometry + */ + CustomGeometry getGeometry(){ CTShapeProperties spPr = getSpPr(); - String name; - if(spPr.isSetPrstGeom()) { - name = spPr.getPrstGeom().getPrst().toString(); + CustomGeometry geom; + PresetGeometries dict = PresetGeometries.getInstance(); + if(spPr.isSetPrstGeom()){ + String name = spPr.getPrstGeom().getPrst().toString(); + geom = dict.get(name); + if(geom == null) { + throw new IllegalStateException("Unknown shape geometry: " + name); + } + } else if (spPr.isSetCustGeom()){ + geom = new CustomGeometry(spPr.getCustGeom()); } else { - name = "rect"; + geom = dict.get("rect"); } - CustomGeometry geom = dict.get(name); - Rectangle2D anchor = getAnchor(); - if(geom != null) { - // the guides in the shape definitions are all defined relative to each other, - // so we build the path starting from (0,0). - final Rectangle2D anchorEmu = new Rectangle2D.Double( - 0, - 0, - Units.toEMU(anchor.getWidth()), - Units.toEMU(anchor.getHeight()) - ); - - GeneralPath path = new GeneralPath(); - Context ctx = new Context(geom, new IAdjustableShape() { - public Rectangle2D getAnchor() { - return anchorEmu; - } + return geom; + } - public Guide getAdjustValue(String name) { - CTPresetGeometry2D prst = getSpPr().getPrstGeom(); - if(prst.isSetAvLst()) { - for(CTGeomGuide g : prst.getAvLst().getGdList()){ - if(g.getName().equals(name)) { - return new Guide(g); - } - } - } - return null; - } - }); - for(Path p : geom){ - path.append( p.getPath(ctx) , false); - } + /** + * @return any shape-specific geometry that is not included in presetShapeDefinitions.xml + * (line decorations, etc) + */ + List getCustomOutlines(){ + return Collections.emptyList(); + } - // translate the result to the canvas coordinates in points - AffineTransform at = new AffineTransform(); - at.scale( - 1.0/Units.EMU_PER_POINT, 1.0/Units.EMU_PER_POINT); - at.translate(Units.toEMU(anchor.getX()), Units.toEMU(anchor.getY())); - return at.createTransformedShape(path); - } else { - return anchor; - } - } + /** + * draw any content within this shape (image, text, etc.). + * + * @param graphics the graphics to draw into + */ + public void drawContent(Graphics2D graphics){ + } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java index f6f92d4f59..598baaeee4 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java @@ -32,7 +32,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShapeNonVisua import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide; import org.openxmlformats.schemas.presentationml.x2006.main.SldDocument; -import java.awt.*; +import java.awt.Graphics2D; import java.io.IOException; @Beta @@ -109,11 +109,11 @@ public final class XSLFSlide extends XSLFSheet { return "sld"; } - public XSLFSlideMaster getMasterSheet(){ - return getSlideLayout().getSlideMaster(); + @Override + public XSLFSlideLayout getMasterSheet(){ + return getSlideLayout(); } - @Override public XSLFSlideLayout getSlideLayout(){ if(_layout == null){ for (POIXMLDocumentPart p : getRelations()) { @@ -128,7 +128,6 @@ public final class XSLFSlide extends XSLFSheet { return _layout; } - @Override public XSLFSlideMaster getSlideMaster(){ return getSlideLayout().getSlideMaster(); } @@ -159,20 +158,12 @@ public final class XSLFSlide extends XSLFSheet { } if(_notes == null) { // This slide lacks notes - // Not al have them, sorry... + // Not all have them, sorry... return null; } return _notes; } - public void setFollowMasterBackground(boolean value){ - _slide.setShowMasterSp(value); - } - - public boolean getFollowMasterBackground(){ - return !_slide.isSetShowMasterSp() || _slide.getShowMasterSp(); - } - /** * * @return title of this slide or empty string if title is not set @@ -182,27 +173,59 @@ public final class XSLFSlide extends XSLFSheet { return txt == null ? "" : txt.getText(); } + @Override public XSLFTheme getTheme(){ return getSlideLayout().getSlideMaster().getTheme(); } - @Override - public void draw(Graphics2D graphics){ - - if (getFollowMasterBackground()){ - XSLFSlideLayout layout = getSlideLayout(); - layout.draw(graphics); - } + /** + * + * @return the information about background appearance of this slide + */ + public XSLFBackground getBackground() { - super.draw(graphics); - } - @Override - public XSLFBackground getBackground(){ if(_slide.getCSld().isSetBg()) { return new XSLFBackground(_slide.getCSld().getBg(), this); } + + XSLFSlideLayout layout = getMasterSheet(); + if(layout.getXmlObject().getCSld().isSetBg()) { + return new XSLFBackground(layout.getXmlObject().getCSld().getBg(), this); + } + + XSLFSlideMaster master = layout.getMasterSheet(); + if(master.getXmlObject().getCSld().isSetBg()) { + return new XSLFBackground(master.getXmlObject().getCSld().getBg(), this); + } return null; } + /** + * + * @return whether shapes on the master slide should be shown or not. + */ + public boolean getFollowMasterGraphics(){ + return !_slide.isSetShowMasterSp() || _slide.getShowMasterSp(); + } + + /** + * + * @param value whether shapes on the master slide should be shown or not. + */ + public void setFollowMasterGraphics(boolean value){ + _slide.setShowMasterSp(value); + } + + + @Override + public void draw(Graphics2D graphics){ + + XSLFBackground bg = getBackground(); + if(bg != null) bg.draw(graphics); + + super.draw(graphics); + } + + } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java index 699d153345..4a505972dc 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideLayout.java @@ -22,7 +22,6 @@ import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; import org.apache.xmlbeans.XmlException; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextListStyle; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideLayout; import org.openxmlformats.schemas.presentationml.x2006.main.SldLayoutDocument; @@ -42,13 +41,13 @@ public class XSLFSlideLayout extends XSLFSheet { public XSLFSlideLayout(PackagePart part, PackageRelationship rel) throws IOException, XmlException { super(part, rel); SldLayoutDocument doc = - SldLayoutDocument.Factory.parse(getPackagePart().getInputStream()); + SldLayoutDocument.Factory.parse(getPackagePart().getInputStream()); _layout = doc.getSldLayout(); setCommonSlideData(_layout.getCSld()); } - public String getName(){ + public String getName() { return _layout.getCSld().getName(); } @@ -61,79 +60,92 @@ public class XSLFSlideLayout extends XSLFSheet { } @Override - protected String getRootElementName(){ + protected String getRootElementName() { return "sldLayout"; } /** * Slide master object associated with this layout. - *

- * Within a slide master slide are contained all elements - * that describe the objects and their corresponding formatting - * for within a presentation slide. - *

- *

- * Within a slide master slide are two main elements. - * The cSld element specifies the common slide elements such as shapes and - * their attached text bodies. Then the txStyles element specifies the - * formatting for the text within each of these shapes. The other properties - * within a slide master slide specify other properties for within a presentation slide - * such as color information, headers and footers, as well as timing and - * transition information for all corresponding presentation slides. - *

* * @return slide master. Never null. * @throws IllegalStateException if slide master was not found */ - @Override - public XSLFSlideMaster getSlideMaster(){ - if(_master == null){ + public XSLFSlideMaster getSlideMaster() { + if (_master == null) { for (POIXMLDocumentPart p : getRelations()) { - if (p instanceof XSLFSlideMaster){ - _master = (XSLFSlideMaster)p; - } - } + if (p instanceof XSLFSlideMaster) { + _master = (XSLFSlideMaster) p; + } + } } - if(_master == null) { + if (_master == null) { throw new IllegalStateException("SlideMaster was not found for " + this.toString()); } return _master; } - - public XSLFTheme getTheme(){ - return getSlideMaster().getTheme(); - } + @Override + public XSLFSlideMaster getMasterSheet() { + return getSlideMaster(); + } + + @Override + public XSLFTheme getTheme() { + return getSlideMaster().getTheme(); + } @Override - protected CTTextListStyle getTextProperties(Placeholder textType) { - XSLFTextShape lp = getTextShapeByType(textType); - CTTextListStyle props = lp.getTextBody(false).getLstStyle(); - return props; + public boolean getFollowMasterGraphics() { + return !_layout.isSetShowMasterSp() || _layout.getShowMasterSp(); } /** * Render this sheet into the supplied graphics object - * */ @Override - protected boolean canDraw(XSLFShape shape){ - if(shape instanceof XSLFSimpleShape){ - XSLFSimpleShape txt = (XSLFSimpleShape)shape; + protected boolean canDraw(XSLFShape shape) { + if (shape instanceof XSLFSimpleShape) { + XSLFSimpleShape txt = (XSLFSimpleShape) shape; CTPlaceholder ph = txt.getCTPlaceholder(); - if(ph != null) { + if (ph != null) { return false; } } return true; } - @Override - public XSLFBackground getBackground(){ - if(_layout.getCSld().isSetBg()) { - return new XSLFBackground(_layout.getCSld().getBg(), this); + /** + * Copy placeholders from this layout to the destination slide + * + * @param slide destination slide + */ + public void copyLayout(XSLFSlide slide) { + for (XSLFShape sh : getShapes()) { + if (sh instanceof XSLFTextShape) { + XSLFTextShape tsh = (XSLFTextShape) sh; + Placeholder ph = tsh.getTextType(); + if (ph == null) continue; + + switch (ph) { + // these are special and not copied by default + case DATETIME: + case SLIDE_NUMBER: + case FOOTER: + break; + default: + slide.getSpTree().addNewSp().set(tsh.getXmlObject().copy()); + } + } } - return getSlideMaster().getBackground(); + } + + /** + * + * @return type of this layout + */ + public SlideLayout getType(){ + int ordinal = _layout.getType().intValue() - 1; + return SlideLayout.values()[ordinal]; } } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java index 2ec83609a8..e73ee7a4c1 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlideMaster.java @@ -21,7 +21,9 @@ import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.poi.util.Beta; import org.apache.xmlbeans.XmlException; +import org.openxmlformats.schemas.drawingml.x2006.main.CTColorMapping; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextListStyle; +import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMaster; import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideMasterTextStyles; import org.openxmlformats.schemas.presentationml.x2006.main.SldMasterDocument; @@ -78,7 +80,12 @@ import java.util.Map; return "sldMaster"; } - public XSLFSlideLayout getLayout(String name){ + @Override + public XSLFSheet getMasterSheet() { + return null; + } + + private Map getLayouts(){ if(_layouts == null){ _layouts = new HashMap(); for (POIXMLDocumentPart p : getRelations()) { @@ -88,14 +95,36 @@ import java.util.Map; } } } - return _layouts.get(name); + return _layouts; } + /** + * + * @return all slide layouts referencing this master + */ + public XSLFSlideLayout[] getSlideLayouts() { + return getLayouts().values().toArray(new XSLFSlideLayout[_layouts.size()]); + } + + public XSLFSlideLayout getLayout(SlideLayout type){ + for(XSLFSlideLayout layout : getLayouts().values()){ + if(layout.getType() == type) { + return layout; + } + } + return null; + } + + @Override public XSLFTheme getTheme(){ if(_theme == null){ for (POIXMLDocumentPart p : getRelations()) { if (p instanceof XSLFTheme){ _theme = (XSLFTheme)p; + CTColorMapping cmap = _slide.getClrMap(); + if(cmap != null){ + _theme.initColorMap(cmap); + } break; } } @@ -122,11 +151,20 @@ import java.util.Map; return props; } + /** + * Render this sheet into the supplied graphics object + * + */ @Override - public XSLFBackground getBackground(){ - if(_slide.getCSld().isSetBg()) { - return new XSLFBackground(_slide.getCSld().getBg(), this); + protected boolean canDraw(XSLFShape shape){ + if(shape instanceof XSLFSimpleShape){ + XSLFSimpleShape txt = (XSLFSimpleShape)shape; + CTPlaceholder ph = txt.getCTPlaceholder(); + if(ph != null) { + return false; + } } - return null; + return true; } + } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java index 335e77d593..f3d4400aa0 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java @@ -35,7 +35,7 @@ import org.openxmlformats.schemas.drawingml.x2006.main.STLineEndWidth; import org.openxmlformats.schemas.drawingml.x2006.main.STPenAlignment; import org.openxmlformats.schemas.drawingml.x2006.main.STPresetLineDashVal; -import java.awt.*; +import java.awt.Color; /** * Represents a cell of a table in a .pptx presentation @@ -77,7 +77,7 @@ public class XSLFTableCell extends XSLFTextShape { } @Override - public void setMarginLeft(double margin){ + public void setLeftInset(double margin){ CTTableCellProperties pr = getXmlObject().getTcPr(); if(pr == null) pr = getXmlObject().addNewTcPr(); @@ -85,7 +85,7 @@ public class XSLFTableCell extends XSLFTextShape { } @Override - public void setMarginRight(double margin){ + public void setRightInset(double margin){ CTTableCellProperties pr = getXmlObject().getTcPr(); if(pr == null) pr = getXmlObject().addNewTcPr(); @@ -93,7 +93,7 @@ public class XSLFTableCell extends XSLFTextShape { } @Override - public void setMarginTop(double margin){ + public void setTopInset(double margin){ CTTableCellProperties pr = getXmlObject().getTcPr(); if(pr == null) pr = getXmlObject().addNewTcPr(); @@ -101,7 +101,7 @@ public class XSLFTableCell extends XSLFTextShape { } @Override - public void setMarginBottom(double margin){ + public void setBottomInset(double margin){ CTTableCellProperties pr = getXmlObject().getTcPr(); if(pr == null) pr = getXmlObject().addNewTcPr(); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java index 177e8099eb..ef523b4fc8 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextBox.java @@ -63,23 +63,4 @@ public class XSLFTextBox extends XSLFAutoShape { return ct; } - - /** - * Specifies that the corresponding shape should be represented by the generating application - * as a placeholder. When a shape is considered a placeholder by the generating application - * it can have special properties to alert the user that they may enter content into the shape. - * Different types of placeholders are allowed and can be specified by using the placeholder - * type attribute for this element - * - * @param placeholder - */ - public void setPlaceholder(Placeholder placeholder){ - CTShape sh = (CTShape)getXmlObject(); - CTApplicationNonVisualDrawingProps nv = sh.getNvSpPr().getNvPr(); - if(placeholder == null) { - if(nv.isSetPh()) nv.unsetPh(); - } else { - nv.addNewPh().setType(STPlaceholderType.Enum.forInt(placeholder.ordinal() + 1)); - } - } } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java index a67dc0d34a..7134246bbb 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java @@ -30,7 +30,8 @@ import org.openxmlformats.schemas.drawingml.x2006.main.STTextAlignType; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; -import java.awt.*; +import java.awt.Color; +import java.awt.Graphics2D; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; @@ -80,6 +81,23 @@ public class XSLFTextParagraph implements Iterable{ return out.toString(); } + private String getVisibleText(){ + StringBuilder out = new StringBuilder(); + for (XSLFTextRun r : _runs) { + String txt = r.getText(); + switch (r.getTextCap()){ + case ALL: + txt = txt.toUpperCase(); + break; + case SMALL: + txt = txt.toLowerCase(); + break; + } + out.append(txt); + } + return out.toString(); + } + @Internal public CTTextParagraph getXmlObject(){ return _p; @@ -89,6 +107,7 @@ public class XSLFTextParagraph implements Iterable{ return _shape; } + public List getTextRuns(){ return _runs; } @@ -186,7 +205,7 @@ public class XSLFTextParagraph implements Iterable{ ParagraphPropertyFetcher fetcher = new ParagraphPropertyFetcher(getLevel()){ public boolean fetch(CTTextParagraphProperties props){ if(props.isSetBuClr()){ - XSLFColor c = new XSLFColor(props.getBuClr(), theme); + XSLFColor c = new XSLFColor(props.getBuClr(), theme, null); setValue(c.getColor()); return true; } @@ -496,17 +515,18 @@ public class XSLFTextParagraph implements Iterable{ return "[" + getClass() + "]" + getText(); } - public List getTextLines(){ + List getTextLines(){ return _lines; } public double draw(Graphics2D graphics, double x, double y){ - double marginLeft = _shape.getMarginLeft(); - double marginRight = _shape.getMarginRight(); + double marginLeft = _shape.getLeftInset(); + double marginRight = _shape.getRightInset(); Rectangle2D anchor = _shape.getAnchor(); double penY = y; double textOffset = getLeftMargin(); + boolean firstLine = true; for(TextFragment line : _lines){ double penX = x; switch (getTextAlign()) { @@ -521,7 +541,7 @@ public class XSLFTextParagraph implements Iterable{ break; } - if(_bullet != null){ + if(_bullet != null && firstLine){ _bullet.draw(graphics, penX + getIndent(), penY); } line.draw(graphics, penX, penY); @@ -535,6 +555,8 @@ public class XSLFTextParagraph implements Iterable{ // positive value means absolute spacing in points penY += -spacing; } + + firstLine = false; } return penY - y; } @@ -551,8 +573,12 @@ public class XSLFTextParagraph implements Iterable{ void draw(Graphics2D graphics, double x, double y){ double yBaseline = y + _layout.getAscent(); - graphics.drawString(_str.getIterator(), (float)x, (float)yBaseline ); - + Integer textMode = (Integer)graphics.getRenderingHint(XSLFRenderingHint.TEXT_RENDERING_MODE); + if(textMode != null && textMode == XSLFRenderingHint.TEXT_MODE_GLYPHS){ + _layout.draw(graphics, (float)x, (float)yBaseline); + } else { + graphics.drawString(_str.getIterator(), (float)x, (float)yBaseline ); + } } public float getHeight(){ @@ -564,8 +590,8 @@ public class XSLFTextParagraph implements Iterable{ } - public AttributedString getAttributedString(){ - String text = getText(); + AttributedString getAttributedString(Graphics2D graphics){ + String text = getVisibleText(); AttributedString string = new AttributedString(text); @@ -579,7 +605,10 @@ public class XSLFTextParagraph implements Iterable{ int endIndex = startIndex + length; string.addAttribute(TextAttribute.FOREGROUND, run.getFontColor(), startIndex, endIndex); + + // user can pass an object to convert fonts via a rendering hint string.addAttribute(TextAttribute.FAMILY, run.getFontFamily(), startIndex, endIndex); + string.addAttribute(TextAttribute.SIZE, (float)run.getFontSize(), startIndex, endIndex); if(run.isBold()) { string.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, startIndex, endIndex); @@ -601,6 +630,7 @@ public class XSLFTextParagraph implements Iterable{ string.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, startIndex, endIndex); } + startIndex = endIndex; } @@ -610,7 +640,7 @@ public class XSLFTextParagraph implements Iterable{ void breakText(Graphics2D graphics){ _lines = new ArrayList(); - AttributedString at = getAttributedString(); + AttributedString at = getAttributedString(graphics); AttributedCharacterIterator it = at.getIterator(); if(it.getBeginIndex() == it.getEndIndex()) { return; @@ -628,7 +658,8 @@ public class XSLFTextParagraph implements Iterable{ int endIndex = measurer.getPosition(); - if(getTextAlign() == TextAlign.JUSTIFY) { + TextAlign hAlign = getTextAlign(); + if(hAlign == TextAlign.JUSTIFY || hAlign == TextAlign.JUSTIFY_LOW) { layout = layout.getJustifiedLayout((float)wrappingWidth); } @@ -673,7 +704,7 @@ public class XSLFTextParagraph implements Iterable{ width = _shape.getSheet().getSlideShow().getPageSize().getWidth(); } else { width = _shape.getAnchor().getWidth() - - _shape.getMarginLeft() - _shape.getMarginRight() - getLeftMargin(); + _shape.getLeftInset() - _shape.getRightInset() - getLeftMargin(); } return width; } @@ -700,7 +731,13 @@ public class XSLFTextParagraph implements Iterable{ } int level = getLevel(); - XmlObject[] o = _shape.getSheet().getSlideMaster().getXmlObject().selectPath( + + XSLFSheet masterSheet = _shape.getSheet(); + while (masterSheet.getMasterSheet() != null){ + masterSheet = masterSheet.getMasterSheet(); + } + + XmlObject[] o = masterSheet.getXmlObject().selectPath( "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' " + "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' " + ".//p:txStyles/p:" + defaultStyleSelector +"/a:lvl" +(level+1)+ "pPr"); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextRun.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextRun.java index e4ebf9db58..b4aa3ca8bf 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextRun.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextRun.java @@ -20,14 +20,17 @@ import org.apache.poi.util.Beta; import org.apache.poi.xslf.model.CharacterPropertyFetcher; import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; import org.openxmlformats.schemas.drawingml.x2006.main.CTSRgbColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTSchemeColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeStyle; import org.openxmlformats.schemas.drawingml.x2006.main.CTSolidColorFillProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextCharacterProperties; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextFont; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextNormalAutofit; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraphProperties; import org.openxmlformats.schemas.drawingml.x2006.main.STTextStrikeType; import org.openxmlformats.schemas.drawingml.x2006.main.STTextUnderlineType; -import java.awt.*; +import java.awt.Color; /** * Represents a run of text within the containing text body. The run element is the @@ -70,12 +73,14 @@ public class XSLFTextRun { public Color getFontColor(){ final XSLFTheme theme = _p.getParentShape().getSheet().getTheme(); + CTShapeStyle style = _p.getParentShape().getSpStyle(); + final CTSchemeColor shapeStyle = style == null ? null : style.getFontRef().getSchemeClr(); CharacterPropertyFetcher fetcher = new CharacterPropertyFetcher(_p.getLevel()){ public boolean fetch(CTTextCharacterProperties props){ CTSolidColorFillProperties solidFill = props.getSolidFill(); - if(solidFill != null){ - Color c = new XSLFColor(solidFill, theme).getColor(); + if(solidFill != null) { + Color c = new XSLFColor(solidFill, theme, shapeStyle).getColor(); setValue(c); return true; } @@ -104,6 +109,10 @@ public class XSLFTextRun { * @return font size in points or -1 if font size is not set. */ public double getFontSize(){ + double scale = 1; + CTTextNormalAutofit afit = getParentParagraph().getParentShape().getTextBodyPr().getNormAutofit(); + if(afit != null) scale = (double)afit.getFontScale() / 100000; + CharacterPropertyFetcher fetcher = new CharacterPropertyFetcher(_p.getLevel()){ public boolean fetch(CTTextCharacterProperties props){ if(props.isSetSz()){ @@ -114,7 +123,27 @@ public class XSLFTextRun { } }; fetchCharacterProperty(fetcher); - return fetcher.getValue() == null ? -1 : fetcher.getValue(); + return fetcher.getValue() == null ? -1 : fetcher.getValue()*scale; + } + + /** + * + * @return the spacing between characters within a text run, + * If this attribute is omitted than a value of 0 or no adjustment is assumed. + */ + public double getCharacterSpacing(){ + + CharacterPropertyFetcher fetcher = new CharacterPropertyFetcher(_p.getLevel()){ + public boolean fetch(CTTextCharacterProperties props){ + if(props.isSetSpc()){ + setValue(props.getSpc()*0.01); + return true; + } + return false; + } + }; + fetchCharacterProperty(fetcher); + return fetcher.getValue() == null ? 0 : fetcher.getValue(); } /** @@ -234,6 +263,24 @@ public class XSLFTextRun { return fetcher.getValue() == null ? false : fetcher.getValue(); } + /** + * @return whether a run of text will be formatted as a superscript text. Default is false. + */ + public TextCap getTextCap() { + CharacterPropertyFetcher fetcher = new CharacterPropertyFetcher(_p.getLevel()){ + public boolean fetch(CTTextCharacterProperties props){ + if(props.isSetCap()){ + int idx = props.getCap().intValue() - 1; + setValue(TextCap.values()[idx]); + return true; + } + return false; + } + }; + fetchCharacterProperty(fetcher); + return fetcher.getValue() == null ? TextCap.NONE : fetcher.getValue(); + } + /** * Specifies whether this run of text will be formatted as bold text * diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java index 279cac9198..dd49c316a0 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTextShape.java @@ -30,12 +30,16 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType; import org.openxmlformats.schemas.drawingml.x2006.main.STTextVerticalType; import org.openxmlformats.schemas.drawingml.x2006.main.STTextWrappingType; +import org.openxmlformats.schemas.presentationml.x2006.main.CTApplicationNonVisualDrawingProps; import org.openxmlformats.schemas.presentationml.x2006.main.CTPlaceholder; +import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; +import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; /** @@ -44,7 +48,7 @@ import java.util.List; * @author Yegor Kozlov */ @Beta -public abstract class XSLFTextShape extends XSLFSimpleShape { +public abstract class XSLFTextShape extends XSLFSimpleShape implements Iterable{ private final List _paragraphs; /*package*/ XSLFTextShape(XmlObject shape, XSLFSheet sheet) { @@ -59,7 +63,14 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { } } - // textual properties + public Iterator iterator(){ + return _paragraphs.iterator(); + } + + /** + * + * @return text contained within this shape or empty string + */ public String getText() { StringBuilder out = new StringBuilder(); for (XSLFTextParagraph p : _paragraphs) { @@ -69,10 +80,34 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { return out.toString(); } + /** + * unset text from this shape + */ + public void clearText(){ + _paragraphs.clear(); + CTTextBody txBody = getTextBody(true); + txBody.setPArray(null); // remove any existing paragraphs + } + + public void setText(String text){ + clearText(); + + addNewTextParagraph().addNewTextRun().setText(text); + } + + /** + * + * @return text paragraphs in this shape + */ public List getTextParagraphs() { return _paragraphs; } + /** + * add a new paragraph run to this shape + * + * @return created paragraph run + */ public XSLFTextParagraph addNewTextParagraph() { CTTextBody txBody = getTextBody(true); CTTextParagraph p = txBody.addNewP(); @@ -84,9 +119,9 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** * Sets the type of vertical alignment for the text. - * One of the Anchor* constants defined in this class. * - * @param anchor - the type of alignment. Default is {@link org.apache.poi.xslf.usermodel.VerticalAlignment#TOP} + * @param anchor - the type of alignment. + * A null values unsets this property. */ public void setVerticalAlignment(VerticalAlignment anchor){ CTTextBodyProperties bodyPr = getTextBodyPr(); @@ -102,7 +137,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** * Returns the type of vertical alignment for the text. * - * @return the type of alignment + * @return the type of vertical alignment */ public VerticalAlignment getVerticalAlignment(){ PropertyFetcher fetcher = new TextBodyPropertyFetcher(){ @@ -147,13 +182,15 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { } return TextDirection.HORIZONTAL; } + + /** * Returns the distance (in points) between the bottom of the text frame * and the bottom of the inscribed rectangle of the shape that contains the text. * - * @return the bottom margin or -1 if not set + * @return the bottom inset in points */ - public double getMarginBottom(){ + public double getBottomInset(){ PropertyFetcher fetcher = new TextBodyPropertyFetcher(){ public boolean fetch(CTTextBodyProperties props){ if(props.isSetBIns()){ @@ -173,9 +210,9 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { * and the left edge of the inscribed rectangle of the shape that contains * the text. * - * @return the left margin + * @return the left inset in points */ - public double getMarginLeft(){ + public double getLeftInset(){ PropertyFetcher fetcher = new TextBodyPropertyFetcher(){ public boolean fetch(CTTextBodyProperties props){ if(props.isSetLIns()){ @@ -195,9 +232,9 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { * text frame and the right edge of the inscribed rectangle of the shape * that contains the text. * - * @return the right margin + * @return the right inset in points */ - public double getMarginRight(){ + public double getRightInset(){ PropertyFetcher fetcher = new TextBodyPropertyFetcher(){ public boolean fetch(CTTextBodyProperties props){ if(props.isSetRIns()){ @@ -216,9 +253,9 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { * Returns the distance (in points) between the top of the text frame * and the top of the inscribed rectangle of the shape that contains the text. * - * @return the top margin + * @return the top inset in points */ - public double getMarginTop(){ + public double getTopInset(){ PropertyFetcher fetcher = new TextBodyPropertyFetcher(){ public boolean fetch(CTTextBodyProperties props){ if(props.isSetTIns()){ @@ -235,11 +272,11 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** * Sets the botom margin. - * @see #getMarginBottom() + * @see #getBottomInset() * * @param margin the bottom margin */ - public void setMarginBottom(double margin){ + public void setBottomInset(double margin){ CTTextBodyProperties bodyPr = getTextBodyPr(); if (bodyPr != null) { if(margin == -1) bodyPr.unsetBIns(); @@ -249,11 +286,11 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** * Sets the left margin. - * @see #getMarginLeft() + * @see #getLeftInset() * * @param margin the left margin */ - public void setMarginLeft(double margin){ + public void setLeftInset(double margin){ CTTextBodyProperties bodyPr = getTextBodyPr(); if (bodyPr != null) { if(margin == -1) bodyPr.unsetLIns(); @@ -263,11 +300,11 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** * Sets the right margin. - * @see #getMarginRight() + * @see #getRightInset() * * @param margin the right margin */ - public void setMarginRight(double margin){ + public void setRightInset(double margin){ CTTextBodyProperties bodyPr = getTextBodyPr(); if (bodyPr != null) { if(margin == -1) bodyPr.unsetRIns(); @@ -277,11 +314,11 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** * Sets the top margin. - * @see #getMarginTop() + * @see #getTopInset() * * @param margin the top margin */ - public void setMarginTop(double margin){ + public void setTopInset(double margin){ CTTextBodyProperties bodyPr = getTextBodyPr(); if (bodyPr != null) { if(margin == -1) bodyPr.unsetTIns(); @@ -291,10 +328,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { /** - * Returns the value indicating word wrap. - * One of the Wrap* constants defined in this class. - * - * @return the value indicating word wrap + * @return whether to wrap words within the bounding rectangle */ public boolean getWordWrap(){ PropertyFetcher fetcher = new TextBodyPropertyFetcher(){ @@ -311,9 +345,8 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { } /** - * Specifies how the text should be wrapped * - * @param wrap the value indicating how the text should be wrapped + * @param wrap whether to wrap words within the bounding rectangle */ public void setWordWrap(boolean wrap){ CTTextBodyProperties bodyPr = getTextBodyPr(); @@ -381,33 +414,25 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { } } - @Override - public void draw(Graphics2D graphics){ - java.awt.Shape outline = getOutline(); - - // shadow - XSLFShadow shadow = getShadow(); - - Paint fill = getFill(graphics); - Paint line = getLinePaint(graphics); - if(shadow != null) { - shadow.draw(graphics); - } - - if(fill != null) { - graphics.setPaint(fill); - graphics.fill(outline); - } - if (line != null){ - graphics.setPaint(line); - applyStroke(graphics); - graphics.draw(outline); + /** + * Specifies that the corresponding shape should be represented by the generating application + * as a placeholder. When a shape is considered a placeholder by the generating application + * it can have special properties to alert the user that they may enter content into the shape. + * Different types of placeholders are allowed and can be specified by using the placeholder + * type attribute for this element + * + * @param placeholder + */ + public void setPlaceholder(Placeholder placeholder){ + CTShape sh = (CTShape)getXmlObject(); + CTApplicationNonVisualDrawingProps nv = sh.getNvSpPr().getNvPr(); + if(placeholder == null) { + if(nv.isSetPh()) nv.unsetPh(); + } else { + nv.addNewPh().setType(STPlaceholderType.Enum.forInt(placeholder.ordinal() + 1)); } - - // text - if(getText().length() > 0) drawText(graphics); - } + } /** * Compute the cumulative height occupied by the text @@ -418,15 +443,19 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { return drawParagraphs(img.createGraphics(), 0, 0); } - void breakText(Graphics2D graphics){ + /** + * break the contained text into lines + */ + private void breakText(Graphics2D graphics){ for(XSLFTextParagraph p : _paragraphs) p.breakText(graphics); } - public void drawText(Graphics2D graphics) { + @Override + public void drawContent(Graphics2D graphics) { breakText(graphics); Rectangle2D anchor = getAnchor(); - double x = anchor.getX() + getMarginLeft(); + double x = anchor.getX() + getLeftInset(); double y = anchor.getY(); // first dry-run to calculate the total height of the text @@ -434,21 +463,20 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { switch (getVerticalAlignment()){ case TOP: - y += getMarginTop(); + y += getTopInset(); break; case BOTTOM: - y += anchor.getHeight() - textHeight - getMarginBottom(); + y += anchor.getHeight() - textHeight - getBottomInset(); break; default: case MIDDLE: double delta = anchor.getHeight() - textHeight - - getMarginTop() - getMarginBottom(); - y += getMarginTop() + delta/2; + getTopInset() - getBottomInset(); + y += getTopInset() + delta/2; break; } drawParagraphs(graphics, x, y); - } @@ -461,7 +489,7 @@ public abstract class XSLFTextShape extends XSLFSimpleShape { double y0 = y; for(int i = 0; i < _paragraphs.size(); i++){ XSLFTextParagraph p = _paragraphs.get(i); - java.util.List lines = p.getTextLines(); + List lines = p.getTextLines(); if(i > 0 && lines.size() > 0) { // the amount of vertical white space before the paragraph diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTheme.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTheme.java index 77dd0a8564..b996dd5fb4 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTheme.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFTheme.java @@ -26,6 +26,7 @@ import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; import org.openxmlformats.schemas.drawingml.x2006.main.CTBaseStyles; import org.openxmlformats.schemas.drawingml.x2006.main.CTColor; +import org.openxmlformats.schemas.drawingml.x2006.main.CTColorMapping; import org.openxmlformats.schemas.drawingml.x2006.main.CTColorScheme; import org.openxmlformats.schemas.drawingml.x2006.main.CTOfficeStyleSheet; import org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument; @@ -36,6 +37,11 @@ import java.io.OutputStream; import java.util.HashMap; import java.util.Map; +/** + * A shared style sheet in a .pptx slide show + * + * @author Yegor Kozlov + */ @Beta public class XSLFTheme extends POIXMLDocumentPart { private CTOfficeStyleSheet _theme; @@ -64,17 +70,33 @@ public class XSLFTheme extends POIXMLDocumentPart { String name = c.getDomNode().getLocalName(); _schemeColors.put(name, c); } + } - _schemeColors.put("bg1", _schemeColors.get("lt1")); - _schemeColors.put("bg2", _schemeColors.get("lt2")); - _schemeColors.put("tx1", _schemeColors.get("dk1")); - _schemeColors.put("tx2", _schemeColors.get("dk2")); + /** + * re-map colors + * + * @param cmap color map defined in the master slide referencing this theme + */ + void initColorMap(CTColorMapping cmap) { + _schemeColors.put("bg1", _schemeColors.get(cmap.getBg1().toString())); + _schemeColors.put("bg2", _schemeColors.get(cmap.getBg2().toString())); + _schemeColors.put("tx1", _schemeColors.get(cmap.getTx1().toString())); + _schemeColors.put("tx2", _schemeColors.get(cmap.getTx2().toString())); } + /** + * + * @return name of this theme, e.g. "Office Theme" + */ public String getName(){ return _theme.getName(); } + /** + * Set name of this theme + * + * @param name name of this theme + */ public void setName(String name){ _theme.setName(name); } @@ -111,10 +133,20 @@ public class XSLFTheme extends POIXMLDocumentPart { out.close(); } + /** + * @return typeface of the major font to use in a document. + * Typically the major font is used for heading areas of a document. + * + */ public String getMajorFont(){ return _theme.getThemeElements().getFontScheme().getMajorFont().getLatin().getTypeface(); } + /** + * @return typeface of the minor font to use in a document. + * Typically the monor font is used for normal text or paragraph areas. + * + */ public String getMinorFont(){ return _theme.getThemeElements().getFontScheme().getMinorFont().getLatin().getTypeface(); } diff --git a/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java b/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java index f4e6955e6a..76bb08559f 100644 --- a/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java +++ b/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java @@ -28,21 +28,26 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.RenderingHints; -import java.awt.geom.AffineTransform; -import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; -import java.io.File; import java.io.FileOutputStream; /** - * Date: 10/11/11 + * An utulity to convert slides of a .pptx slide show to a PNG image * * @author Yegor Kozlov */ public class PPTX2PNG { + + static void usage(){ + System.out.println("Usage: PPTX2PNG [options] "); + System.out.println("Options:"); + System.out.println(" -scale scale factor"); + System.out.println(" -slide 1-based index of a slide to render"); + } + public static void main(String[] args) throws Exception { if (args.length == 0) { - System.out.println("Usage: PPTX2PNG [options] "); + usage(); return; } @@ -62,6 +67,11 @@ public class PPTX2PNG { } } + if(file == null){ + usage(); + return; + } + System.out.println("Processing " + file); XMLSlideShow ppt = new XMLSlideShow(OPCPackage.open(file)); @@ -79,19 +89,23 @@ public class PPTX2PNG { BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = img.createGraphics(); + // default rendering options graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); - graphics.setPaint(Color.white); - graphics.fill(new Rectangle2D.Float(0, 0, width, height)); + graphics.setColor(Color.white); + graphics.clearRect(0, 0, width, height); - graphics.scale((double) width / pgsize.width, (double) height / pgsize.height); + graphics.scale(scale, scale); + // draw stuff slide[i].draw(graphics); - String fname = file.replaceAll("\\.pptx", "-" + (i + 1) + ".png"); + // save the result + int sep = file.lastIndexOf("."); + String fname = file.substring(0, sep == -1 ? file.length() : sep) + "-" + (i + 1) +".png"; FileOutputStream out = new FileOutputStream(fname); ImageIO.write(img, "png", out); out.close(); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java b/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java index b9f15139d5..df3e2ec29d 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/geom/TestFormulaParser.java @@ -24,7 +24,7 @@ public class TestFormulaParser extends TestCase { }; CustomGeometry geom = new CustomGeometry(CTCustomGeometry2D.Factory.newInstance()); - Context ctx = new Context(geom, null); + Context ctx = new Context(geom, null, null); for(Formula fmla : ops) { ctx.evaluate(fmla); } diff --git a/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java b/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java index 5c19b4e53e..c71a065bb7 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/geom/TestPresetGeometries.java @@ -21,11 +21,7 @@ public class TestPresetGeometries extends TestCase { for(String name : shapes.keySet()) { CustomGeometry geom = shapes.get(name); - Context ctx = new Context(geom, new IAdjustableShape() { - public Rectangle2D getAnchor() { - return new Rectangle2D.Double(0, 0, 100, 100); - } - + Context ctx = new Context(geom, new Rectangle2D.Double(0, 0, 100, 100), new IAdjustableShape() { public Guide getAdjustValue(String name) { return null; } diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java index 1f8826fdad..948b792b8b 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestPPTX2PNG.java @@ -34,7 +34,7 @@ import java.awt.image.BufferedImage; public class TestPPTX2PNG extends TestCase { public void testRender(){ String[] testFiles = {"layouts.pptx", "sample.pptx", "shapes.pptx", - "45541_Header.pptx", "backgrounds.pptx"}; + "themes.pptx", "backgrounds.pptx"}; for(String sampleFile : testFiles){ XMLSlideShow pptx = XSLFTestDataSamples.openSampleDocument(sampleFile); Dimension pg = pptx.getPageSize(); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java index 7cab8ea4e3..d29cb30662 100755 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFAutoShape.java @@ -34,38 +34,38 @@ public class TestXSLFAutoShape extends TestCase { shape.addNewTextParagraph().addNewTextRun().setText("POI"); // default margins from slide master - assertEquals(3.6, shape.getMarginBottom()); - assertEquals(3.6, shape.getMarginTop()); - assertEquals(7.2, shape.getMarginLeft()); - assertEquals(7.2, shape.getMarginRight()); - - shape.setMarginBottom(1.0); - assertEquals(1.0, shape.getMarginBottom()); - shape.setMarginTop(2.0); - assertEquals(2.0, shape.getMarginTop()); - shape.setMarginLeft(3.0); - assertEquals(3.0, shape.getMarginLeft()); - shape.setMarginRight(4.0); - assertEquals(4.0, shape.getMarginRight()); - - shape.setMarginBottom(0.0); - assertEquals(0.0, shape.getMarginBottom()); - shape.setMarginTop(0.0); - assertEquals(0.0, shape.getMarginTop()); - shape.setMarginLeft(0.0); - assertEquals(0.0, shape.getMarginLeft()); - shape.setMarginRight(0.0); - assertEquals(0.0, shape.getMarginRight()); + assertEquals(3.6, shape.getBottomInset()); + assertEquals(3.6, shape.getTopInset()); + assertEquals(7.2, shape.getLeftInset()); + assertEquals(7.2, shape.getRightInset()); + + shape.setBottomInset(1.0); + assertEquals(1.0, shape.getBottomInset()); + shape.setTopInset(2.0); + assertEquals(2.0, shape.getTopInset()); + shape.setLeftInset(3.0); + assertEquals(3.0, shape.getLeftInset()); + shape.setRightInset(4.0); + assertEquals(4.0, shape.getRightInset()); + + shape.setBottomInset(0.0); + assertEquals(0.0, shape.getBottomInset()); + shape.setTopInset(0.0); + assertEquals(0.0, shape.getTopInset()); + shape.setLeftInset(0.0); + assertEquals(0.0, shape.getLeftInset()); + shape.setRightInset(0.0); + assertEquals(0.0, shape.getRightInset()); // unset to defauls - shape.setMarginBottom(-1); - assertEquals(3.6, shape.getMarginBottom()); - shape.setMarginTop(-1); - assertEquals(3.6, shape.getMarginTop()); - shape.setMarginLeft(-1); - assertEquals(7.2, shape.getMarginLeft()); - shape.setMarginRight(-1); - assertEquals(7.2, shape.getMarginRight()); + shape.setBottomInset(-1); + assertEquals(3.6, shape.getBottomInset()); + shape.setTopInset(-1); + assertEquals(3.6, shape.getTopInset()); + shape.setLeftInset(-1); + assertEquals(7.2, shape.getLeftInset()); + shape.setRightInset(-1); + assertEquals(7.2, shape.getRightInset()); // shape assertTrue(shape.getWordWrap()); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFColor.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFColor.java index ffb25b37e1..108fca327b 100755 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFColor.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFColor.java @@ -37,7 +37,7 @@ public class TestXSLFColor extends TestCase { CTSRgbColor c = xml.addNewSrgbClr(); c.setVal(new byte[]{(byte)0xFF, 0, 0}); - XSLFColor color = new XSLFColor(xml, null); + XSLFColor color = new XSLFColor(xml, null, null); assertEquals(-1, color.getAlpha()); c.addNewAlpha().setVal(50000); @@ -99,7 +99,7 @@ public class TestXSLFColor extends TestCase { c.setSat2(100000); c.setLum2(50000); - XSLFColor color = new XSLFColor(xml, null); + XSLFColor color = new XSLFColor(xml, null, null); assertEquals(new Color(128, 00, 00), color.getColor()); } @@ -107,7 +107,7 @@ public class TestXSLFColor extends TestCase { CTColor xml = CTColor.Factory.newInstance(); xml.addNewSrgbClr().setVal(new byte[]{ (byte)0xFF, (byte)0xFF, 0}); - XSLFColor color = new XSLFColor(xml, null); + XSLFColor color = new XSLFColor(xml, null, null); assertEquals(new Color(0xFF, 0xFF, 0), color.getColor()); } @@ -118,19 +118,19 @@ public class TestXSLFColor extends TestCase { CTColor xml = CTColor.Factory.newInstance(); xml.addNewSchemeClr().setVal(STSchemeColorVal.ACCENT_2); - XSLFColor color = new XSLFColor(xml, theme); + XSLFColor color = new XSLFColor(xml, theme, null); // accent2 is theme1.xml is assertEquals(Color.decode("0xC0504D"), color.getColor()); xml = CTColor.Factory.newInstance(); xml.addNewSchemeClr().setVal(STSchemeColorVal.LT_1); - color = new XSLFColor(xml, theme); + color = new XSLFColor(xml, theme, null); // assertEquals(Color.decode("0xFFFFFF"), color.getColor()); xml = CTColor.Factory.newInstance(); xml.addNewSchemeClr().setVal(STSchemeColorVal.DK_1); - color = new XSLFColor(xml, theme); + color = new XSLFColor(xml, theme, null); // assertEquals(Color.decode("0x000000"), color.getColor()); } @@ -138,7 +138,7 @@ public class TestXSLFColor extends TestCase { public void testPresetColor() { CTColor xml = CTColor.Factory.newInstance(); xml.addNewPrstClr().setVal(STPresetColorVal.AQUAMARINE); - XSLFColor color = new XSLFColor(xml, null); + XSLFColor color = new XSLFColor(xml, null, null); assertEquals(new Color(127, 255, 212), color.getColor()); @@ -147,7 +147,7 @@ public class TestXSLFColor extends TestCase { STPresetColorVal.Enum val = STPresetColorVal.Enum.forString(colorName); assertNotNull(colorName, val); xml.addNewPrstClr().setVal(val); - color = new XSLFColor(xml, null); + color = new XSLFColor(xml, null, null); assertEquals(XSLFColor.presetColors.get(colorName), color.getColor()); } } diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java index 9ffe69fe98..d8cb5783e4 100755 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlide.java @@ -19,9 +19,6 @@ package org.apache.poi.xslf.usermodel; import junit.framework.TestCase; import org.apache.poi.xslf.XSLFTestDataSamples; -import org.apache.poi.POIXMLDocumentPart; - -import java.util.List; /** * @author Yegor Kozlov @@ -99,11 +96,11 @@ public class TestXSLFSlide extends TestCase { assertEquals(0, ppt.getSlides().length); XSLFSlide slide = ppt.createSlide(); - assertTrue(slide.getFollowMasterBackground()); - slide.setFollowMasterBackground(false); - assertFalse(slide.getFollowMasterBackground()); - slide.setFollowMasterBackground(true); - assertTrue(slide.getFollowMasterBackground()); + assertTrue(slide.getFollowMasterGraphics()); + slide.setFollowMasterGraphics(false); + assertFalse(slide.getFollowMasterGraphics()); + slide.setFollowMasterGraphics(true); + assertTrue(slide.getFollowMasterGraphics()); } } \ No newline at end of file diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlideShow.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlideShow.java index c07493a3f9..46e10e45d8 100755 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlideShow.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFSlideShow.java @@ -38,7 +38,7 @@ public class TestXSLFSlideShow extends TestCase { List rels = slide1.getRelations(); assertEquals(1, rels.size()); - assertEquals(slide1.getMasterSheet().getLayout("blank"), rels.get(0)); + assertEquals(slide1.getSlideMaster().getLayout(SlideLayout.BLANK), rels.get(0)); XSLFSlide slide2 = ppt.createSlide(); assertEquals(2, ppt.getSlides().length); @@ -91,7 +91,7 @@ public class TestXSLFSlideShow extends TestCase { assertEquals(1, masters.length); XSLFSlide slide = ppt.createSlide(); - assertSame(masters[0], slide.getMasterSheet()); + assertSame(masters[0], slide.getSlideMaster()); } public void testSlideLayout(){ diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java index 7524b25292..6347b63ccf 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java @@ -65,10 +65,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr1.isSetBIns() && !bodyPr1.isSetTIns() && !bodyPr1.isSetAnchor() ); - assertEquals(7.2, shape1.getMarginLeft()); // 0.1" - assertEquals(7.2, shape1.getMarginRight()); // 0.1" - assertEquals(3.6, shape1.getMarginTop()); // 0.05" - assertEquals(3.6, shape1.getMarginBottom()); // 0.05" + assertEquals(7.2, shape1.getLeftInset()); // 0.1" + assertEquals(7.2, shape1.getRightInset()); // 0.1" + assertEquals(3.6, shape1.getTopInset()); // 0.05" + assertEquals(3.6, shape1.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.MIDDLE, shape1.getVerticalAlignment()); // now check text properties @@ -95,10 +95,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr2.isSetBIns() && !bodyPr2.isSetTIns() && !bodyPr2.isSetAnchor() ); - assertEquals(7.2, shape2.getMarginLeft()); // 0.1" - assertEquals(7.2, shape2.getMarginRight()); // 0.1" - assertEquals(3.6, shape2.getMarginTop()); // 0.05" - assertEquals(3.6, shape2.getMarginBottom()); // 0.05" + assertEquals(7.2, shape2.getLeftInset()); // 0.1" + assertEquals(7.2, shape2.getRightInset()); // 0.1" + assertEquals(3.6, shape2.getTopInset()); // 0.05" + assertEquals(3.6, shape2.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.TOP, shape2.getVerticalAlignment()); assertEquals("subtitle", shape2.getText()); @@ -134,10 +134,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr1.isSetBIns() && !bodyPr1.isSetTIns() && !bodyPr1.isSetAnchor() ); - assertEquals(7.2, shape1.getMarginLeft()); // 0.1" - assertEquals(7.2, shape1.getMarginRight()); // 0.1" - assertEquals(3.6, shape1.getMarginTop()); // 0.05" - assertEquals(3.6, shape1.getMarginBottom()); // 0.05" + assertEquals(7.2, shape1.getLeftInset()); // 0.1" + assertEquals(7.2, shape1.getRightInset()); // 0.1" + assertEquals(3.6, shape1.getTopInset()); // 0.05" + assertEquals(3.6, shape1.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.MIDDLE, shape1.getVerticalAlignment()); // now check text properties @@ -169,10 +169,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr2.isSetBIns() && !bodyPr2.isSetTIns() && !bodyPr2.isSetAnchor() ); - assertEquals(7.2, shape2.getMarginLeft()); // 0.1" - assertEquals(7.2, shape2.getMarginRight()); // 0.1" - assertEquals(3.6, shape2.getMarginTop()); // 0.05" - assertEquals(3.6, shape2.getMarginBottom()); // 0.05" + assertEquals(7.2, shape2.getLeftInset()); // 0.1" + assertEquals(7.2, shape2.getRightInset()); // 0.1" + assertEquals(3.6, shape2.getTopInset()); // 0.05" + assertEquals(3.6, shape2.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.TOP, shape2.getVerticalAlignment()); XSLFTextRun pr1 = shape2.getTextParagraphs().get(0).getTextRuns().get(0); @@ -244,10 +244,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr1.isSetBIns() && !bodyPr1.isSetTIns() && !bodyPr1.isSetAnchor() ); - assertEquals(7.2, shape1.getMarginLeft()); // 0.1" - assertEquals(7.2, shape1.getMarginRight()); // 0.1" - assertEquals(3.6, shape1.getMarginTop()); // 0.05" - assertEquals(3.6, shape1.getMarginBottom()); // 0.05" + assertEquals(7.2, shape1.getLeftInset()); // 0.1" + assertEquals(7.2, shape1.getRightInset()); // 0.1" + assertEquals(3.6, shape1.getTopInset()); // 0.05" + assertEquals(3.6, shape1.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.TOP, shape1.getVerticalAlignment()); // now check text properties @@ -278,10 +278,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr2.isSetBIns() && !bodyPr2.isSetTIns() && !bodyPr2.isSetAnchor() ); - assertEquals(7.2, shape2.getMarginLeft()); // 0.1" - assertEquals(7.2, shape2.getMarginRight()); // 0.1" - assertEquals(3.6, shape2.getMarginTop()); // 0.05" - assertEquals(3.6, shape2.getMarginBottom()); // 0.05" + assertEquals(7.2, shape2.getLeftInset()); // 0.1" + assertEquals(7.2, shape2.getRightInset()); // 0.1" + assertEquals(3.6, shape2.getTopInset()); // 0.05" + assertEquals(3.6, shape2.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.BOTTOM, shape2.getVerticalAlignment()); assertEquals("Section Header", shape2.getText()); @@ -318,10 +318,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr1.isSetBIns() && !bodyPr1.isSetTIns() && !bodyPr1.isSetAnchor() ); - assertEquals(7.2, shape1.getMarginLeft()); // 0.1" - assertEquals(7.2, shape1.getMarginRight()); // 0.1" - assertEquals(3.6, shape1.getMarginTop()); // 0.05" - assertEquals(3.6, shape1.getMarginBottom()); // 0.05" + assertEquals(7.2, shape1.getLeftInset()); // 0.1" + assertEquals(7.2, shape1.getRightInset()); // 0.1" + assertEquals(3.6, shape1.getTopInset()); // 0.05" + assertEquals(3.6, shape1.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.MIDDLE, shape1.getVerticalAlignment()); // now check text properties @@ -351,10 +351,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr2.isSetBIns() && !bodyPr2.isSetTIns() && !bodyPr2.isSetAnchor() ); - assertEquals(7.2, shape2.getMarginLeft()); // 0.1" - assertEquals(7.2, shape2.getMarginRight()); // 0.1" - assertEquals(3.6, shape2.getMarginTop()); // 0.05" - assertEquals(3.6, shape2.getMarginBottom()); // 0.05" + assertEquals(7.2, shape2.getLeftInset()); // 0.1" + assertEquals(7.2, shape2.getRightInset()); // 0.1" + assertEquals(3.6, shape2.getTopInset()); // 0.05" + assertEquals(3.6, shape2.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.TOP, shape2.getVerticalAlignment()); XSLFTextRun pr1 = shape2.getTextParagraphs().get(0).getTextRuns().get(0); @@ -425,10 +425,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr1.isSetBIns() && !bodyPr1.isSetTIns() && !bodyPr1.isSetAnchor() ); - assertEquals(7.2, shape1.getMarginLeft()); // 0.1" - assertEquals(7.2, shape1.getMarginRight()); // 0.1" - assertEquals(3.6, shape1.getMarginTop()); // 0.05" - assertEquals(3.6, shape1.getMarginBottom()); // 0.05" + assertEquals(7.2, shape1.getLeftInset()); // 0.1" + assertEquals(7.2, shape1.getRightInset()); // 0.1" + assertEquals(3.6, shape1.getTopInset()); // 0.05" + assertEquals(3.6, shape1.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.MIDDLE, shape1.getVerticalAlignment()); // now check text properties @@ -449,10 +449,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr2.isSetBIns() && !bodyPr2.isSetTIns() && !bodyPr2.isSetAnchor() ); - assertEquals(7.2, shape2.getMarginLeft()); // 0.1" - assertEquals(7.2, shape2.getMarginRight()); // 0.1" - assertEquals(3.6, shape2.getMarginTop()); // 0.05" - assertEquals(3.6, shape2.getMarginBottom()); // 0.05" + assertEquals(7.2, shape2.getLeftInset()); // 0.1" + assertEquals(7.2, shape2.getRightInset()); // 0.1" + assertEquals(3.6, shape2.getTopInset()); // 0.05" + assertEquals(3.6, shape2.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.TOP, shape2.getVerticalAlignment()); XSLFTextRun pr1 = shape2.getTextParagraphs().get(0).getTextRuns().get(0); @@ -498,10 +498,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr1.isSetBIns() && !bodyPr1.isSetTIns() && !bodyPr1.isSetAnchor() ); - assertEquals(7.2, shape1.getMarginLeft()); // 0.1" - assertEquals(7.2, shape1.getMarginRight()); // 0.1" - assertEquals(3.6, shape1.getMarginTop()); // 0.05" - assertEquals(3.6, shape1.getMarginBottom()); // 0.05" + assertEquals(7.2, shape1.getLeftInset()); // 0.1" + assertEquals(7.2, shape1.getRightInset()); // 0.1" + assertEquals(3.6, shape1.getTopInset()); // 0.05" + assertEquals(3.6, shape1.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.BOTTOM, shape1.getVerticalAlignment()); // now check text properties @@ -532,10 +532,10 @@ public class TestXSLFTextShape extends TestCase { !bodyPr2.isSetBIns() && !bodyPr2.isSetTIns() && !bodyPr2.isSetAnchor() ); - assertEquals(7.2, shape2.getMarginLeft()); // 0.1" - assertEquals(7.2, shape2.getMarginRight()); // 0.1" - assertEquals(3.6, shape2.getMarginTop()); // 0.05" - assertEquals(3.6, shape2.getMarginBottom()); // 0.05" + assertEquals(7.2, shape2.getLeftInset()); // 0.1" + assertEquals(7.2, shape2.getRightInset()); // 0.1" + assertEquals(3.6, shape2.getTopInset()); // 0.05" + assertEquals(3.6, shape2.getBottomInset()); // 0.05" assertEquals(VerticalAlignment.TOP, shape2.getVerticalAlignment()); XSLFTextRun pr1 = shape2.getTextParagraphs().get(0).getTextRuns().get(0); diff --git a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java index 81f35d3250..b01c25e1d5 100644 --- a/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java +++ b/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTheme.java @@ -18,22 +18,141 @@ package org.apache.poi.xslf.usermodel; import junit.framework.TestCase; + import org.apache.poi.xslf.XSLFTestDataSamples; +import java.awt.Color; +import java.awt.TexturePaint; + /** - * test common properties for sheets (slides, masters, layouts, etc.) + * test reading properties from a multi-theme and multi-master document * * @author Yegor Kozlov */ public class TestXSLFTheme extends TestCase { public void testRead(){ - XMLSlideShow ppt = new XMLSlideShow(); - XSLFSlide slide = ppt.createSlide(); - XSLFTheme theme = slide.getSlideLayout().getSlideMaster().getTheme(); - assertNotNull(theme); - + XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("themes.pptx"); + XSLFSlide[] slides = ppt.getSlides(); + + slide1(slides[0]); + slide2(slides[1]); + slide3(slides[2]); + slide4(slides[3]); + slide5(slides[4]); + slide6(slides[5]); + slide7(slides[6]); + slide8(slides[7]); + slide9(slides[8]); + slide10(slides[9]); + } + + private XSLFShape getShape(XSLFSheet sheet, String name){ + for(XSLFShape sh : sheet.getShapes()){ + if(sh.getShapeName().equals(name)) return sh; + } + throw new IllegalArgumentException("Shape not found: " + name); + } + + void slide1(XSLFSlide slide){ + assertEquals(Color.white, slide.getBackground().getFillColor()); + + XSLFTheme theme = slide.getTheme(); assertEquals("Office Theme", theme.getName()); - //XSLFColor accent1 = theme.getColor("accent1"); - //assertNotNull(accent1); + + XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Rectangle 3"); + RenderableShape rsh1 = new RenderableShape(sh1); + XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(Color.white, run1.getFontColor()); + assertEquals(new Color(79, 129, 189), sh1.getFillColor()); + assertTrue(rsh1.getFillPaint(null) instanceof Color) ; // solid fill + + } + + void slide2(XSLFSlide slide){ + // Background 2, darker 10% + // YK: PPT shows slightly different color: new Color(221, 217, 195) + assertEquals(new Color(214, 212, 203), slide.getBackground().getFillColor()); + } + + void slide3(XSLFSlide slide){ + assertNull(slide.getBackground().getFillColor()); + assertTrue(slide.getBackground().getPaint(null).getClass().getName().indexOf("Gradient") > 0); + } + + void slide4(XSLFSlide slide){ + assertNull(slide.getBackground().getFillColor()); + assertTrue(slide.getBackground().getPaint(null).getClass().getName().indexOf("Gradient") > 0); + + XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Rectangle 4"); + RenderableShape rsh1 = new RenderableShape(sh1); + XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(Color.white, run1.getFontColor()); + assertEquals(new Color(148, 198, 0), sh1.getFillColor()); + assertTrue(rsh1.getFillPaint(null) instanceof Color) ; // solid fill + + XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 3"); + XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(new Color(148, 198, 0), run2.getFontColor()); + assertNull(sh2.getFillColor()); // no fill + + assertTrue(slide.getSlideLayout().getFollowMasterGraphics()); + } + + void slide5(XSLFSlide slide){ + assertTrue(slide.getBackground().getPaint(null) instanceof TexturePaint); + + XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 1"); + XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(new Color(148, 198, 0), run2.getFontColor()); + assertNull(sh2.getFillColor()); // no fill + // font size is 40pt and scale factor is 90% + assertEquals(36.0, run2.getFontSize()); + + assertTrue(slide.getSlideLayout().getFollowMasterGraphics()); + } + + void slide6(XSLFSlide slide){ + + XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Subtitle 3"); + XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(new Color(66, 66, 66), run1.getFontColor()); + assertNull(sh1.getFillColor()); // no fill + + XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Title 2"); + XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(new Color(148, 198, 0), run2.getFontColor()); + assertNull(sh2.getFillColor()); // no fill + + assertFalse(slide.getSlideLayout().getFollowMasterGraphics()); + } + + void slide7(XSLFSlide slide){ + + //YK: PPT reports a slightly different color: r=189,g=239,b=87 + assertEquals(new Color(182, 218, 108), slide.getBackground().getFillColor()); + + assertFalse(slide.getFollowMasterGraphics()); + } + + void slide8(XSLFSlide slide){ + assertTrue(slide.getBackground().getPaint(null) instanceof TexturePaint); + } + + void slide9(XSLFSlide slide){ + assertTrue(slide.getBackground().getPaint(null) instanceof TexturePaint); + } + + void slide10(XSLFSlide slide){ + assertTrue(slide.getBackground().getPaint(null).getClass().getName().indexOf("Gradient") > 0); + + XSLFTextShape sh1 = (XSLFTextShape)getShape(slide, "Title 3"); + XSLFTextRun run1 = sh1.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(Color.white, run1.getFontColor()); + assertNull(sh1.getFillColor()); // no fill + + XSLFTextShape sh2 = (XSLFTextShape)getShape(slide, "Subtitle 4"); + XSLFTextRun run2 = sh2.getTextParagraphs().get(0).getTextRuns().get(0); + assertEquals(Color.white, run2.getFontColor()); + assertNull(sh2.getFillColor()); // no fill } } diff --git a/src/resources/scratchpad/org/apache/poi/xslf/usermodel/empty.pptx b/src/resources/ooxml/org/apache/poi/xslf/usermodel/empty.pptx similarity index 100% rename from src/resources/scratchpad/org/apache/poi/xslf/usermodel/empty.pptx rename to src/resources/ooxml/org/apache/poi/xslf/usermodel/empty.pptx diff --git a/src/resources/scratchpad/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml b/src/resources/ooxml/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml similarity index 100% rename from src/resources/scratchpad/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml rename to src/resources/ooxml/org/apache/poi/xslf/usermodel/presetShapeDefinitions.xml diff --git a/test-data/slideshow/pptx2svg.pptx b/test-data/slideshow/pptx2svg.pptx new file mode 100644 index 0000000000000000000000000000000000000000..2f9a3515cb87978455bc83fa6b6ba675896bf1cb GIT binary patch literal 149172 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

YC2Qm2vCnY}(8hx@EWseM5isddKq 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 + + + + + + + + + + + + + +Paragraphs and Rich Formatting + + +✭ +The Paragraphs and Rich Formatting portion of the DrawingML framework stores text +and related formatting information for a text body contained within a shape. +Formatting for text within a shape can be broken down into three levels of precision, +namely body, paragraph, and run formatting properties. +✭ +Body Formatting +✭ + + +Being the highest level of formatting available within a shape, the body properties allow for the +manipulation of the text area as a whole. This means that all paragraphs and runs of text for the shape +in question would be encompassed within here and, therefore, follow the text body style defined here. + + +✭ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +POI + + + + + + + + + + + + + + + + + + + + + diff --git a/test-data/slideshow/themes.pptx b/test-data/slideshow/themes.pptx new file mode 100755 index 0000000000000000000000000000000000000000..ff39de3ed4067e312cde6964b91bea51c96a5fb3 GIT binary patch literal 309866 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%0AI`jknz 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 Rx52M777$b(1tKo={{ZRfPOSg{ literal 0 HcmV?d00001 -- 2.39.5