public String getText() {
final StringBuilder sb = new StringBuilder();
- if (masterByDefault) {
- for (final MasterSheet<S,P> master : slideshow.getSlideMasters()) {
- for (final Shape<S,P> shape : master) {
- if (shape instanceof TextShape) {
- final TextShape<S,P> ts = (TextShape<S,P>)shape;
- final String text = ts.getText();
- if (text == null || text.isEmpty() || "*".equals(text)) {
- continue;
- }
- if (ts.isPlaceholder()) {
- // don't bother about boiler plate text on master sheets
- LOG.log(POILogger.INFO, "Ignoring boiler plate (placeholder) text on slide master:", text);
- continue;
- }
- sb.append(text);
- if (!text.endsWith("\n")) {
- sb.append("\n");
- }
-
- }
- }
- }
- }
-
for (final Slide<S, P> slide : slideshow.getSlides()) {
sb.append(getText(slide));
}
printShapeText(slide, sb);
}
+ if (masterByDefault) {
+ final MasterSheet<S,P> ms = slide.getMasterSheet();
+ printSlideMaster(ms, sb);
+
+ // only print slide layout, if it's a different instance
+ final MasterSheet<S,P> sl = slide.getSlideLayout();
+ if (sl != ms) {
+ printSlideMaster(sl, sb);
+ }
+ }
+
if (commentsByDefault) {
printComments(slide, sb);
}
return sb.toString();
}
+ private void printSlideMaster(final MasterSheet<S,P> master, final StringBuilder sb) {
+ if (master == null) {
+ return;
+ }
+ for (final Shape<S,P> shape : master) {
+ if (shape instanceof TextShape) {
+ final TextShape<S,P> ts = (TextShape<S,P>)shape;
+ final String text = ts.getText();
+ if (text == null || text.isEmpty() || "*".equals(text)) {
+ continue;
+ }
+ if (ts.isPlaceholder()) {
+ // don't bother about boiler plate text on master sheets
+ LOG.log(POILogger.INFO, "Ignoring boiler plate (placeholder) text on slide master:", text);
+ continue;
+ }
+ sb.append(text);
+ if (!text.endsWith("\n")) {
+ sb.append("\n");
+ }
+
+ }
+ }
+ }
+
private String printHeaderReturnFooter(final Sheet<S,P> sheet, final StringBuilder sb) {
final Sheet<S, P> m = (sheet instanceof Slide) ? sheet.getMasterSheet() : sheet;
final StringBuilder footer = new StringBuilder("\n");
}
@Test
- @Ignore("currently slidelayouts aren't yet supported")
public void testGetMasterText() throws Exception {
try (XMLSlideShow xml = openPPTX("WithMaster.pptx");
SlideShowExtractor extractor = new SlideShowExtractor(xml)) {
String wholeText =
"First page title\n" +
"First page subtitle\n" +
- "This is the Master Title\n" +
"This text comes from the Master Slide\n" +
"\n" +
- // TODO Detect we didn't have a title, and include the master one
"2nd page subtitle\n" +
"Footer from the master slide\n" +
- "This is the Master Title\n" +
"This text comes from the Master Slide\n";
assertEquals(wholeText, text);
}