Convert the XSLF text extractor from using the old style low level code to use usermodel

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1165109 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2011-09-04 20:51:21 +00:00
parent 17c3ed2223
commit dd69223e2b

View File

@ -16,22 +16,21 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.xslf.extractor; package org.apache.poi.xslf.extractor;
import java.io.IOException;
import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xslf.XSLFSlideShow; import org.apache.poi.xslf.XSLFSlideShow;
import org.apache.poi.xslf.usermodel.DrawingParagraph; import org.apache.poi.xslf.usermodel.DrawingParagraph;
import org.apache.poi.xslf.usermodel.XMLSlideShow; import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFComments;
import org.apache.poi.xslf.usermodel.XSLFCommonSlideData; import org.apache.poi.xslf.usermodel.XSLFCommonSlideData;
import org.apache.poi.xslf.usermodel.XSLFNotes;
import org.apache.poi.xslf.usermodel.XSLFRelation; import org.apache.poi.xslf.usermodel.XSLFRelation;
import org.apache.poi.xslf.usermodel.XSLFSlide; import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlException;
import org.openxmlformats.schemas.presentationml.x2006.main.CTComment; import org.openxmlformats.schemas.presentationml.x2006.main.CTComment;
import org.openxmlformats.schemas.presentationml.x2006.main.CTCommentList;
import org.openxmlformats.schemas.presentationml.x2006.main.CTNotesSlide;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlideIdListEntry;
import java.io.IOException;
public class XSLFPowerPointExtractor extends POIXMLTextExtractor { public class XSLFPowerPointExtractor extends POIXMLTextExtractor {
public static final XSLFRelation[] SUPPORTED_TYPES = new XSLFRelation[] { public static final XSLFRelation[] SUPPORTED_TYPES = new XSLFRelation[] {
@ -89,51 +88,50 @@ public class XSLFPowerPointExtractor extends POIXMLTextExtractor {
return getText(slidesByDefault, notesByDefault); return getText(slidesByDefault, notesByDefault);
} }
/** /**
* Gets the requested text from the file * Gets the requested text from the file
* @param slideText Should we retrieve text from slides? * @param slideText Should we retrieve text from slides?
* @param notesText Should we retrieve text from notes? * @param notesText Should we retrieve text from notes?
*/ */
public String getText(boolean slideText, boolean notesText) { public String getText(boolean slideText, boolean notesText) {
StringBuffer text = new StringBuffer(); StringBuffer text = new StringBuffer();
XSLFSlide[] slides = slideshow.getSlides(); XSLFSlide[] slides = slideshow.getSlides();
try {
XSLFSlideShow xsl = new XSLFSlideShow(slideshow.getPackage());
for (int i = 0; i < slides.length; i++) {
CTSlideIdListEntry slideId = slideshow.getCTPresentation().getSldIdLst().getSldIdArray(i);
// For now, still very low level for (XSLFSlide slide : slides) {
CTNotesSlide notes = try {
xsl.getNotes(slideId); XSLFNotes notes = slide.getNotes();
CTCommentList comments = XSLFComments comments = slide.getComments();
xsl.getSlideComments(slideId);
if (slideText) { // TODO Do the slide's name
extractText(new XSLFCommonSlideData(slides[i].getXmlObject().getCSld()), text);
// Comments too for the slide // Do the slide's text if requested
if (comments != null) { if (slideText) {
for (CTComment comment : comments.getCmList()) { extractText(slide.getCommonSlideData(), text);
// TODO - comment authors too
// (They're in another stream)
text.append(
comment.getText() + "\n"
);
}
}
}
if (notesText && notes != null) { // If the slide has comments, do those too
extractText(new XSLFCommonSlideData(notes.getCSld()), text); if (comments != null) {
} for (CTComment comment : comments.getCTCommentsList().getCmList()) {
// TODO - comment authors too
// (They're in another stream)
text.append(
comment.getText() + "\n"
);
}
}
} }
} catch (Exception e) {
throw new RuntimeException(e);
}
return text.toString(); // Do the notes if requested
} if (notesText && notes != null) {
extractText(notes.getCommonSlideData(), text);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return text.toString();
}
private void extractText(XSLFCommonSlideData data, StringBuffer text) { private void extractText(XSLFCommonSlideData data, StringBuffer text) {
for (DrawingParagraph p : data.getText()) { for (DrawingParagraph p : data.getText()) {