Index: src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommonSlideData.java =================================================================== --- src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommonSlideData.java (revision 0) +++ src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFCommonSlideData.java (revision 0) @@ -0,0 +1,67 @@ +package org.apache.poi.xslf.usermodel; + +import org.apache.xmlbeans.XmlCursor; +import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTable; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; +import org.openxmlformats.schemas.presentationml.x2006.main.CTCommonSlideData; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape; +import org.openxmlformats.schemas.presentationml.x2006.main.CTShape; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class XSLFCommonSlideData { + private final CTCommonSlideData data; + + public XSLFCommonSlideData(CTCommonSlideData data) { + this.data = data; + } + + public List getText() { + CTGroupShape gs = data.getSpTree(); + + List out = new ArrayList(); + + CTShape[] shapes = gs.getSpArray(); + for (int i = 0; i < shapes.length; i++) { + CTTextBody ctTextBody = shapes[i].getTxBody(); + if (ctTextBody==null) { + continue; + } + + DrawingTextBody textBody = new DrawingTextBody(ctTextBody); + + out.addAll(Arrays.asList(textBody.getParagraphs())); + } + + CTGraphicalObjectFrame[] graphicFrames = gs.getGraphicFrameArray(); + for (CTGraphicalObjectFrame frame: graphicFrames) { + CTGraphicalObjectData data = frame.getGraphic().getGraphicData(); + XmlCursor c = data.newCursor(); + c.selectPath("./*"); + + while (c.toNextSelection()) { + XmlObject o = c.getObject(); + + if (o instanceof CTTable) { + DrawingTable table = new DrawingTable((CTTable) o); + + for (DrawingTableRow row : table.getRows()) { + for (DrawingTableCell cell : row.getCells()) { + DrawingTextBody textBody = cell.getTextBody(); + + out.addAll(Arrays.asList(textBody.getParagraphs())); + } + } + } + } + } + + return out; + } + +} Index: src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingParagraph.java =================================================================== --- src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingParagraph.java (revision 0) +++ src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingParagraph.java (revision 0) @@ -0,0 +1,33 @@ +package org.apache.poi.xslf.usermodel; + +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; +import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTextLineBreak; +import org.apache.xmlbeans.XmlCursor; +import org.apache.xmlbeans.XmlObject; + +public class DrawingParagraph { + private final CTTextParagraph p; + + public DrawingParagraph(CTTextParagraph p) { + this.p = p; + } + + public CharSequence getText() { + StringBuilder text = new StringBuilder(); + + XmlCursor c = p.newCursor(); + c.selectPath("./*"); + while (c.toNextSelection()) { + XmlObject o = c.getObject(); + if (o instanceof CTRegularTextRun) { + CTRegularTextRun txrun = (CTRegularTextRun) o; + text.append(txrun.getT()); + } else if (o instanceof CTTextLineBreak) { + text.append('\n'); + } + } + + return text; + } +} Index: src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTable.java =================================================================== --- src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTable.java (revision 0) +++ src/ooxml/java/org/apache/poi/xslf/usermodel/DrawingTable.java (revision 0) @@ -0,0 +1,23 @@ +package org.apache.poi.xslf.usermodel; + +import org.openxmlformats.schemas.drawingml.x2006.main.CTTable; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTableRow; + +public class DrawingTable { + private final CTTable table; + + public DrawingTable(CTTable table) { + this.table = table; + } + + public DrawingTableRow[] getRows() { + CTTableRow[] ctTableRows = table.getTrArray(); + DrawingTableRow[] o = new DrawingTableRow[ctTableRows.length]; + + for (int i=0; i 0); + + // Check comments are there + assertTrue("Unable to find expected word in text\n" + text, text.contains("TEST")); + } }