From cc7fcdfab3aad498c568ac6a562a48bd82df4030 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 22 Jul 2022 09:55:10 +0000 Subject: [PATCH] [bug-66176] Integrate SmartArt diagrams from powerpoint presentations. Thanks to Yaseen. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902934 13f79535-47bb-0310-9956-ffa450edef68 --- .../examples/xslf/SmartArtConversionDemo.java | 137 ++++++++++ .../poi/xslf/usermodel/XSLFDiagram.java | 243 ++++++++++++++++++ .../xslf/usermodel/XSLFDiagramDrawing.java | 55 ++++ .../poi/xslf/usermodel/XSLFGraphicFrame.java | 9 +- .../poi/xslf/usermodel/XSLFRelation.java | 7 + .../poi/xslf/usermodel/TestXSLFDiagram.java | 131 ++++++++++ test-data/slideshow/smartart-simple.pptx | Bin 0 -> 71102 bytes 7 files changed, 578 insertions(+), 4 deletions(-) create mode 100644 poi-examples/src/main/java/org/apache/poi/examples/xslf/SmartArtConversionDemo.java create mode 100644 poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java create mode 100644 poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagramDrawing.java create mode 100644 poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFDiagram.java create mode 100644 test-data/slideshow/smartart-simple.pptx diff --git a/poi-examples/src/main/java/org/apache/poi/examples/xslf/SmartArtConversionDemo.java b/poi-examples/src/main/java/org/apache/poi/examples/xslf/SmartArtConversionDemo.java new file mode 100644 index 0000000000..95f9f9add4 --- /dev/null +++ b/poi-examples/src/main/java/org/apache/poi/examples/xslf/SmartArtConversionDemo.java @@ -0,0 +1,137 @@ +/* ==================================================================== + 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.examples.xslf; + +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.xslf.usermodel.*; +import org.openxmlformats.schemas.drawingml.x2006.main.CTBlip; +import org.openxmlformats.schemas.drawingml.x2006.main.CTBlipFillProperties; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; + +/** + * Converts SmartArt to openxml shapes and saves the result to the specified output path. + */ +public class SmartArtConversionDemo { + + private final XMLSlideShow inputPptx; + private final XMLSlideShow outputPptx; + + SmartArtConversionDemo(XMLSlideShow inputPptx, XMLSlideShow outputPptx) { + this.inputPptx = inputPptx; + this.outputPptx = outputPptx; + } + + public static void main(String[] args) throws IOException { + if (args.length != 2) { + System.out.println("Expected arguments: "); + System.exit(1); + } + + File inputFile = new File(args[0]); + if (!inputFile.exists()) { + System.out.printf("Unable to find input file at path: %s", args[0]); + System.exit(1); + } + + try ( + FileInputStream inputPptxStream = new FileInputStream(inputFile); + FileOutputStream outputPptxStream = new FileOutputStream(args[1]) + ) { + XMLSlideShow inputPptx = new XMLSlideShow(inputPptxStream); + XMLSlideShow outputPptx = new XMLSlideShow(); + SmartArtConversionDemo demo = new SmartArtConversionDemo(inputPptx, outputPptx); + demo.convertSmartArt(); + outputPptx.write(outputPptxStream); + } + } + + private static void copyAndUpdateImageRelations(XSLFDiagram diagram, XSLFSlide outputSlide) throws IOException { + XSLFGroupShape inputGroupShape = diagram.getGroupShape(); + for (XSLFShape shape : inputGroupShape.getShapes()) { + org.openxmlformats.schemas.presentationml.x2006.main.CTShape ctShape + = (org.openxmlformats.schemas.presentationml.x2006.main.CTShape) shape.getXmlObject(); + + if (ctShape.getSpPr().getBlipFill() == null) { + continue; + } + + CTBlipFillProperties blipFillProps = ctShape.getSpPr().getBlipFill(); + CTBlip blip = blipFillProps.getBlip(); + // In SmartArt diagrams, the references to images/embeds are stored in drawing#.xml.rels. When read by + // POI it copies this relationship to the parent slide to allow POI to correctly resolve the images. + POIXMLDocumentPart inputPicturePart = diagram.getSheet().getRelationById(blip.getEmbed()); + + if (inputPicturePart == null || inputPicturePart.getPackagePart() == null) { + continue; + } + + XSLFPictureData inputPictureData = new XSLFPictureData(inputPicturePart.getPackagePart()); + + // Copy the input image to the output slides and update the shape to reference the copied image + XMLSlideShow outputPptx = outputSlide.getSlideShow(); + XSLFPictureData outputPictureData = outputPptx.addPicture( + inputPicturePart.getPackagePart().getInputStream(), inputPictureData.getType()); + POIXMLDocumentPart.RelationPart outputRelation = outputSlide.addRelation(null, XSLFRelation.IMAGES, outputPictureData); + ctShape.getSpPr().getBlipFill().getBlip().setEmbed(outputRelation.getRelationship().getId()); + } + } + + private static XSLFTheme extractTheme(XMLSlideShow slideShow) { + if (!slideShow.getSlideMasters().isEmpty()) { + return slideShow.getSlideMasters().get(0).getTheme(); + } + return null; + } + + private void convertSmartArt() throws IOException { + // Copy page size and theme + outputPptx.setPageSize(inputPptx.getPageSize()); + XSLFTheme theme = extractTheme(inputPptx); + if (theme != null) { + outputPptx.getSlideMasters().get(0).getTheme().getXmlObject().set(theme.getXmlObject()); + } + + for (XSLFSlide inputSlide : inputPptx.getSlides()) { + XSLFSlide outputSlide = outputPptx.createSlide(); + + List inputShapes = inputSlide.getShapes(); + for (XSLFShape shape : inputShapes) { + if (shape instanceof XSLFDiagram) { + copyDiagramToOutput((XSLFDiagram) shape, outputSlide); + } else { + XSLFAutoShape autoShape = outputSlide.createAutoShape(); + // Hacky hack. Reassign xml to copy the content over. + autoShape.getXmlObject().set(shape.getXmlObject()); + } + } + } + } + + private void copyDiagramToOutput(XSLFDiagram inputDiagram, XSLFSlide outputSlide) throws IOException { + // This method modifies the underlying xml of the input shapes. We modify the xml structure first, then + // assign that to our output shape. + copyAndUpdateImageRelations(inputDiagram, outputSlide); + XSLFGroupShape inputGroupShape = inputDiagram.getGroupShape(); + XSLFGroupShape outputGroupShape = outputSlide.createGroup(); + outputGroupShape.getXmlObject().set(inputGroupShape.getXmlObject()); + } +} diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java new file mode 100644 index 0000000000..ee248c0f69 --- /dev/null +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagram.java @@ -0,0 +1,243 @@ +/* ==================================================================== + 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 com.microsoft.schemas.office.drawing.x2008.diagram.CTGroupShape; +import com.microsoft.schemas.office.drawing.x2008.diagram.CTShape; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.util.Beta; +import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.drawingml.x2006.diagram.CTRelIds; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGroupShapeProperties; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; +import org.openxmlformats.schemas.presentationml.x2006.main.CTApplicationNonVisualDrawingProps; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShapeNonVisual; +import org.openxmlformats.schemas.presentationml.x2006.main.CTShapeNonVisual; + +import javax.xml.namespace.QName; +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.List; + +/** + * Representation of a DrawingML Diagram + *

+ * This class converts the diagram to an {@link XSLFGroupShape} accessible via {@link #getGroupShape()}. The underlying + * {@link XSLFDiagramDrawing} used to create the group shape is accessible via {@link #getDiagramDrawing()}. + *

+ * In pptx files, these diagrams are generated by creating SmartArt. When a pptx has SmartArt, a directory with the + * following structure is created: + * + *

+ * ppt/
+ *   diagrams/
+ *     data#.xml
+ *     drawing#.xml^
+ *     colors#.xml
+ *     quickStyle#.xml
+ *     layout#.xml
+ *     rels/
+ *       data#.xml.rels
+ *       drawing#.xml.rels
+ * 
+ *

+ * ^The `drawing#.xml` file is not in the OpenXML spec. It was added as an extension by Microsoft, namespace: + * http://schemas.microsoft.com/office/drawing/2008/diagram + *

+ * The drawing#.xml file contains the rendered output of the diagram. This class reads the underlying drawing#.xml and + * converts it to a {@link XSLFGroupShape}. + *

+ * The data, drawing, colors, and quickStyle files are in the OpenXML spec. These contain the instructions that define + * how to render the diagram. Rendering diagrams from these files is not trivial, they support for loops, if/elses, etc. + * Integrating such a change into POI would be quite sophisticated and challenging. + * + * @since POI 5.2.3 + */ +@Beta +public class XSLFDiagram extends XSLFGraphicFrame { + + public static final String DRAWINGML_DIAGRAM_URI = "http://schemas.openxmlformats.org/drawingml/2006/diagram"; + private final XSLFDiagramDrawing _drawing; + private final XSLFGroupShape _groupShape; + + /* package protected */ XSLFDiagram(CTGraphicalObjectFrame shape, XSLFSheet sheet) { + super(shape, sheet); + _drawing = readDiagramDrawing(shape, sheet); + _groupShape = initGroupShape(sheet); + } + + private static boolean hasTextContent(CTShape msShapeCt) { + if (msShapeCt.getTxBody() == null || msShapeCt.getTxXfrm() == null) { + return false; + } + // A shape has text content when there is at least 1 paragraph with 1 paragraph run list + List paragraphs = msShapeCt.getTxBody().getPList(); + return paragraphs.stream() + .flatMap(p -> p.getRList().stream()) + .anyMatch(run -> run.getT() != null && !run.getT().trim().isEmpty()); + } + + private static boolean hasBlipEmbed(CTShape msShapeCt) { + return msShapeCt != null + && msShapeCt.getSpPr() != null + && msShapeCt.getSpPr().getBlipFill() != null + && msShapeCt.getSpPr().getBlipFill().getBlip() != null + && msShapeCt.getSpPr().getBlipFill().getBlip().getEmbed() != null; + } + + private static XSLFDiagramDrawing readDiagramDrawing(CTGraphicalObjectFrame shape, XSLFSheet sheet) { + CTGraphicalObjectData graphicData = shape.getGraphic().getGraphicData(); + XmlObject[] children = graphicData.selectChildren(new QName(DRAWINGML_DIAGRAM_URI, "relIds")); + + if (children.length == 0) { + return null; + } + + // CTRelIds doesn't contain a relationship to the drawing#.xml + // But it has the same name as the other data#.xml, layout#.xml, etc. + CTRelIds relIds = (CTRelIds) children[0]; + POIXMLDocumentPart dataModelPart = sheet.getRelationById(relIds.getDm()); + if (dataModelPart == null) { + return null; + } + String dataPartName = dataModelPart.getPackagePart().getPartName().getName(); + String drawingPartName = dataPartName.replace("data", "drawing"); + for (POIXMLDocumentPart.RelationPart rp : sheet.getRelationParts()) { + if (drawingPartName.equals(rp.getDocumentPart().getPackagePart().getPartName().getName())) { + if (rp.getDocumentPart() instanceof XSLFDiagramDrawing) { + return rp.getDocumentPart(); + } + } + } + return null; + } + + // If the shape has text, two XSLFShapes are created. One shape element and one textbox element. + public List convertShape(CTShape msShapeCt, XSLFSheet sheet) { + org.openxmlformats.schemas.presentationml.x2006.main.CTShape shapeCt + = org.openxmlformats.schemas.presentationml.x2006.main.CTShape.Factory.newInstance(); + + // The fields on MS CTShape largely re-use the underlying openxml classes. + // We just copy the fields from the MS CTShape to the openxml CTShape + shapeCt.setStyle(msShapeCt.getStyle()); + shapeCt.setSpPr(msShapeCt.getSpPr()); + + CTShapeNonVisual nonVisualCt = shapeCt.addNewNvSpPr(); + nonVisualCt.setCNvPr(msShapeCt.getNvSpPr().getCNvPr()); + nonVisualCt.setCNvSpPr(msShapeCt.getNvSpPr().getCNvSpPr()); + nonVisualCt.setNvPr(CTApplicationNonVisualDrawingProps.Factory.newInstance()); + shapeCt.setNvSpPr(nonVisualCt); + + ArrayList shapes = new ArrayList<>(); + shapes.add(shapeCt); + + if (hasTextContent(msShapeCt)) { + org.openxmlformats.schemas.presentationml.x2006.main.CTShape textShapeCT = convertText(msShapeCt, nonVisualCt); + shapes.add(textShapeCT); + } + + if (hasBlipEmbed(msShapeCt)) { + String embedId = msShapeCt.getSpPr().getBlipFill().getBlip().getEmbed(); + POIXMLDocumentPart part = _drawing.getRelationById(embedId); + if (part != null) { + // When reading the blip, POI looks into the `slide#.xml.rels` file. However, the blip relationship is + // defined inside `drawing#.xml.rels`. Copy this relationship to the parent. + POIXMLDocumentPart.RelationPart updatedRelation = sheet.addRelation(null, XSLFRelation.IMAGES, part); + shapeCt.getSpPr().getBlipFill().getBlip().setEmbed(updatedRelation.getRelationship().getId()); + } + } + + return shapes; + } + + private org.openxmlformats.schemas.presentationml.x2006.main.CTShape convertText(CTShape msShapeCt, CTShapeNonVisual nonVisualCt) { + org.openxmlformats.schemas.presentationml.x2006.main.CTShape textShapeCT + = org.openxmlformats.schemas.presentationml.x2006.main.CTShape.Factory.newInstance(); + + // SmartArt shapes define a separate `txXfrm` property for the placement of text inside the shape + // We can't easily (is it even possible?) set a separate xfrm for the text on the openxml CTShape. + // Instead, we create a separate textbox shape with the same xfrm. + org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties textShapeProps = textShapeCT.addNewSpPr(); + textShapeProps.setXfrm(msShapeCt.getTxXfrm()); + + textShapeCT.setTxBody(msShapeCt.getTxBody()); + textShapeCT.setStyle(msShapeCt.getStyle()); + // Create a copy of the nonVisualCt when setting it for the text box. + // If we shared the one object, a consumer may be surprised that updating the text shape properties + // also updates the parent shape. + textShapeCT.setNvSpPr((CTShapeNonVisual) nonVisualCt.copy()); + + return textShapeCT; + } + + /** + * Returns the underlying {@link XSLFDiagramDrawing} used to create this diagram. + *

+ * NOTE: Modifying this drawing will not update the groupShape returned from {@link #getGroupShape()}. + */ + public XSLFDiagramDrawing getDiagramDrawing() { + return _drawing; + } + + private XSLFGroupShape initGroupShape(XSLFSheet sheet) { + XSLFDiagramDrawing drawing = getDiagramDrawing(); + if (drawing == null || drawing.getDrawingDocument() == null) { + return null; + } + + CTGroupShape msGroupShapeCt = drawing.getDrawingDocument().getDrawing().getSpTree(); + if (msGroupShapeCt == null || msGroupShapeCt.getSpList().isEmpty()) { + return null; + } + return convertMsGroupToGroupShape(msGroupShapeCt, sheet); + } + + /** + * Returns the diagram represented as a grouped shape. + */ + public XSLFGroupShape getGroupShape() { + return _groupShape; + } + + private XSLFGroupShape convertMsGroupToGroupShape(CTGroupShape msGroupShapeCt, XSLFSheet sheet) { + org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape groupShapeCt + = org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape.Factory.newInstance(); + + CTGroupShapeProperties groupShapePropsCt = groupShapeCt.addNewGrpSpPr(); + + CTGroupShapeNonVisual groupShapeNonVisualCt = groupShapeCt.addNewNvGrpSpPr(); + groupShapeNonVisualCt.setCNvPr(msGroupShapeCt.getNvGrpSpPr().getCNvPr()); + groupShapeNonVisualCt.setCNvGrpSpPr(msGroupShapeCt.getNvGrpSpPr().getCNvGrpSpPr()); + groupShapeNonVisualCt.setNvPr(CTApplicationNonVisualDrawingProps.Factory.newInstance()); + + for (CTShape msShapeCt : msGroupShapeCt.getSpList()) { + List shapes = convertShape(msShapeCt, sheet); + groupShapeCt.getSpList().addAll(shapes); + } + + Rectangle2D anchor = super.getAnchor(); + Rectangle2D interiorAnchor = new Rectangle2D.Double(0, 0, anchor.getWidth(), anchor.getHeight()); + + XSLFGroupShape groupShape = new XSLFGroupShape(groupShapeCt, getSheet()); + groupShape.setAnchor(anchor); + groupShape.setInteriorAnchor(interiorAnchor); + groupShape.setRotation(super.getRotation()); + return groupShape; + } +} diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagramDrawing.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagramDrawing.java new file mode 100644 index 0000000000..014d7f26c3 --- /dev/null +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFDiagramDrawing.java @@ -0,0 +1,55 @@ +/* ==================================================================== + 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 com.microsoft.schemas.office.drawing.x2008.diagram.DrawingDocument; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.util.Beta; +import org.apache.xmlbeans.XmlException; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Drawing representation of a SmartArt diagram. + */ +@Beta +public class XSLFDiagramDrawing extends POIXMLDocumentPart { + + private final DrawingDocument _drawingDoc; + + /* package protected */ XSLFDiagramDrawing() { + super(); + _drawingDoc = DrawingDocument.Factory.newInstance(); + } + + /* package protected */ XSLFDiagramDrawing(PackagePart part) throws XmlException, IOException { + super(part); + _drawingDoc = readPackagePart(part); + } + + private static DrawingDocument readPackagePart(PackagePart part) throws IOException, XmlException { + try (InputStream is = part.getInputStream()) { + return DrawingDocument.Factory.parse(is); + } + } + + public DrawingDocument getDrawingDocument() { + return _drawingDoc; + } +} diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java index 745db2bb16..0ab72a074c 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java @@ -53,7 +53,6 @@ import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; @Beta public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame { private static final String DRAWINGML_CHART_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart"; - private static final String DRAWINGML_DIAGRAM_URI = "http://schemas.openxmlformats.org/drawingml/2006/diagram"; private static final Logger LOG = LogManager.getLogger(XSLFGraphicFrame.class); /*package*/ XSLFGraphicFrame(CTGraphicalObjectFrame shape, XSLFSheet sheet){ @@ -100,6 +99,8 @@ public class XSLFGraphicFrame extends XSLFShape implements GraphicalFrame extractDiagrams(XMLSlideShow slideShow) { + return slideShow.getSlides() + .stream() + .flatMap(s -> s.getShapes().stream()) + .filter(s -> s instanceof XSLFDiagram) + .map(s -> (XSLFDiagram) s) + .collect(Collectors.toList()); + } + + // https://stackoverflow.com/a/3607942 + private static String colorToHex(Color color) { + return String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue()); + } + + private static Color hexToColor(String hex) { + return Color.decode(hex); + } + + @Test + public void testHasDiagram() { + XMLSlideShow inputPptx = XSLFTestDataSamples.openSampleDocument(SIMPLE_DIAGRAM); + List diagrams = extractDiagrams(inputPptx); + assertEquals(1, diagrams.size()); + + XSLFDiagram diagram = diagrams.get(0); + assertTrue(diagram.hasDiagram()); + } + + @Test + public void testDiagramContainsShapes() { + XMLSlideShow inputPptx = XSLFTestDataSamples.openSampleDocument(SIMPLE_DIAGRAM); + List diagrams = extractDiagrams(inputPptx); + assertEquals(1, diagrams.size()); + + XSLFDiagram diagram = diagrams.get(0); + XSLFGroupShape groupShape = diagram.getGroupShape(); + assertNotNull(groupShape); + + // The Group gets the same positioning as the SmartArt. This can be much wider/taller than the content inside. + assertEquals(groupShape.getAnchor().getWidth(), 113.375, 1E-4); + assertEquals(groupShape.getAnchor().getHeight(), 74, 1E-4); + assertEquals(groupShape.getAnchor().getX(), -16.75, 1E-4); + assertEquals(groupShape.getAnchor().getY(), 5.5, 1E-4); + + List shapes = groupShape.getShapes(); + // 4 shapes, 3 text boxes, one shape does not have any text inside it + assertEquals(7, shapes.size()); + + // Shape 1 - Yellow Circle - "abc" center aligned + String accent4Hex = "#ffc000"; // yellow + XSLFAutoShape yellowCircle = (XSLFAutoShape) shapes.get(0); + assertTrue(yellowCircle.getText().isEmpty()); + assertEquals(accent4Hex, colorToHex(yellowCircle.getFillColor())); + + XSLFAutoShape yellowCircleText = (XSLFAutoShape) shapes.get(1); + assertEquals(yellowCircleText.getText(), "abc"); + assertEquals(TextAlign.CENTER, yellowCircleText.getTextParagraphs().get(0).getTextAlign()); + + // Shape 2 - Gradient Blue & Purple - "def" left aligned + XSLFAutoShape gradientCircle = (XSLFAutoShape) shapes.get(2); + assertTrue(gradientCircle.getFillPaint() instanceof PaintStyle.GradientPaint); + assertTrue(gradientCircle.getText().isEmpty()); + + XSLFAutoShape gradientCircleText = (XSLFAutoShape) shapes.get(3); + assertEquals(gradientCircleText.getText(), "def"); + // Even with left justification, the text is rendered on the right side of the circle because SmartArt defines + // a better visual placement for the textbox inside the txXfrm property. + assertEquals(1, gradientCircleText.getTextParagraphs().size()); + XSLFTextParagraph paragraph = gradientCircleText.getTextParagraphs().get(0); + assertEquals(TextAlign.LEFT, paragraph.getTextAlign()); + assertEquals(1, paragraph.getTextRuns().size()); + XSLFTextRun textRun = paragraph.getTextRuns().get(0); + assertTrue(textRun.isBold()); + assertTrue(textRun.isItalic()); + + // Shape 3 - Green Circle with theme color - "ghi" right aligned + XSLFAutoShape greenCircle = (XSLFAutoShape) shapes.get(4); + ColorStyle greenCircleColorStyle = ((PaintStyle.SolidPaint) greenCircle.getFillPaint()).getSolidColor(); + // The circle uses the yellow accent4 color but has HSL adjustments that make it green + assertEquals(hexToColor(accent4Hex), greenCircleColorStyle.getColor()); + assertEquals(50004, greenCircleColorStyle.getAlpha()); // 50% transparency + assertEquals(6533927, greenCircleColorStyle.getHueOff()); + assertEquals(6405, greenCircleColorStyle.getLumOff()); + assertEquals(-27185, greenCircleColorStyle.getSatOff()); + + XSLFAutoShape greenCircleText = (XSLFAutoShape) shapes.get(5); + assertEquals(greenCircleText.getText(), "ghi"); + assertEquals(TextAlign.RIGHT, greenCircleText.getTextParagraphs().get(0).getTextAlign()); + + // Shape 4 - Circle with Picture Fill - no text + XSLFAutoShape pictureShape = (XSLFAutoShape) shapes.get(6); + assertTrue(pictureShape.getText().isEmpty()); + XSLFTexturePaint texturePaint = (XSLFTexturePaint) pictureShape.getFillPaint(); + assertEquals(ContentTypes.IMAGE_JPEG, texturePaint.getContentType()); + } +} diff --git a/test-data/slideshow/smartart-simple.pptx b/test-data/slideshow/smartart-simple.pptx new file mode 100644 index 0000000000000000000000000000000000000000..22992d8e86dc2d42e5e3a80fe175d97fe493b532 GIT binary patch literal 71102 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 Qgk4Jj;fdzB2hb2}Z;xex&;#TYX` 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

Aw(|AQ=aX9g!o(Nc(mA!k!`~=XKh_+$g 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 literal 0 HcmV?d00001 -- 2.39.5