126 lines
4.7 KiB
Java
126 lines
4.7 KiB
Java
/* ====================================================================
|
|
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 static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import org.apache.poi.POIXMLException;
|
|
import org.apache.poi.util.Beta;
|
|
import org.apache.poi.util.Removal;
|
|
import org.apache.xmlbeans.XmlCursor;
|
|
import org.apache.xmlbeans.XmlException;
|
|
import org.apache.xmlbeans.XmlObject;
|
|
import org.apache.xmlbeans.impl.values.XmlAnyTypeImpl;
|
|
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.CTApplicationNonVisualDrawingProps;
|
|
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;
|
|
|
|
/*
|
|
* @deprecated POI 3.16 beta 1. - iterate over the shapes of a slide instead
|
|
*/
|
|
@Removal(version="3.18")
|
|
@Beta
|
|
public class XSLFCommonSlideData {
|
|
private final CTCommonSlideData data;
|
|
|
|
public XSLFCommonSlideData(CTCommonSlideData data) {
|
|
this.data = data;
|
|
}
|
|
|
|
public List<DrawingTextBody> getDrawingText() {
|
|
CTGroupShape gs = data.getSpTree();
|
|
|
|
List<DrawingTextBody> out = new ArrayList<DrawingTextBody>();
|
|
|
|
processShape(gs, out);
|
|
|
|
for (CTGroupShape shape : gs.getGrpSpArray()) {
|
|
processShape(shape, out);
|
|
}
|
|
|
|
for (CTGraphicalObjectFrame frame: gs.getGraphicFrameArray()) {
|
|
CTGraphicalObjectData data = frame.getGraphic().getGraphicData();
|
|
XmlCursor c = data.newCursor();
|
|
c.selectPath("declare namespace pic='"+CTTable.type.getName().getNamespaceURI()+"' .//pic:tbl");
|
|
|
|
while (c.toNextSelection()) {
|
|
XmlObject o = c.getObject();
|
|
|
|
if (o instanceof XmlAnyTypeImpl) {
|
|
// Pesky XmlBeans bug - see Bugzilla #49934
|
|
try {
|
|
o = CTTable.Factory.parse(o.toString(), DEFAULT_XML_OPTIONS);
|
|
} catch (XmlException e) {
|
|
throw new POIXMLException(e);
|
|
}
|
|
}
|
|
|
|
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.add(textBody);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
c.dispose();
|
|
}
|
|
|
|
return out;
|
|
}
|
|
public List<DrawingParagraph> getText() {
|
|
List<DrawingParagraph> paragraphs = new ArrayList<DrawingParagraph>();
|
|
for(DrawingTextBody textBody : getDrawingText()) {
|
|
paragraphs.addAll(Arrays.asList(textBody.getParagraphs()));
|
|
}
|
|
return paragraphs;
|
|
}
|
|
|
|
private void processShape(CTGroupShape gs, List<DrawingTextBody> out) {
|
|
for (CTShape shape : gs.getSpArray()) {
|
|
CTTextBody ctTextBody = shape.getTxBody();
|
|
if (ctTextBody==null) {
|
|
continue;
|
|
}
|
|
|
|
DrawingTextBody textBody;
|
|
CTApplicationNonVisualDrawingProps nvpr = shape.getNvSpPr().getNvPr();
|
|
if(nvpr.isSetPh()) {
|
|
textBody = new DrawingTextPlaceholder(ctTextBody, nvpr.getPh());
|
|
} else {
|
|
textBody = new DrawingTextBody(ctTextBody);
|
|
}
|
|
|
|
out.add(textBody);
|
|
}
|
|
}
|
|
}
|