Author: kiwiwings
Date: Fri Apr 20 20:00:46 2018
New Revision: 1829677

URL: http://svn.apache.org/viewvc?rev=1829677&view=rev
Log:
#61459 - handle slide layouts in extractor

Modified:
    poi/trunk/src/java/org/apache/poi/sl/extractor/SlideShowExtractor.java
    poi/trunk/src/java/org/apache/poi/sl/usermodel/Slide.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java

Modified: poi/trunk/src/java/org/apache/poi/sl/extractor/SlideShowExtractor.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/extractor/SlideShowExtractor.java?rev=1829677&r1=1829676&r2=1829677&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/extractor/SlideShowExtractor.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/sl/extractor/SlideShowExtractor.java Fri 
Apr 20 20:00:46 2018
@@ -116,30 +116,6 @@ public class SlideShowExtractor<
     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));
         }
@@ -154,6 +130,17 @@ public class SlideShowExtractor<
             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);
         }
@@ -165,6 +152,31 @@ public class SlideShowExtractor<
         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");

Modified: poi/trunk/src/java/org/apache/poi/sl/usermodel/Slide.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/usermodel/Slide.java?rev=1829677&r1=1829676&r2=1829677&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/usermodel/Slide.java (original)
+++ poi/trunk/src/java/org/apache/poi/sl/usermodel/Slide.java Fri Apr 20 
20:00:46 2018
@@ -76,4 +76,11 @@ public interface Slide<
      * @return the comment(s) for this slide
      */
     List<? extends Comment> getComments();
+
+    /**
+     * @return the assigned slide layout
+     *
+     * @since POI 4.0.0
+     */
+    MasterSheet getSlideLayout();
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java?rev=1829677&r1=1829676&r2=1829677&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java 
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSlide.java Fri 
Apr 20 20:00:46 2018
@@ -141,6 +141,7 @@ implements Slide<XSLFShape,XSLFTextParag
         return getSlideLayout();
     }
 
+    @Override
     public XSLFSlideLayout getSlideLayout(){
         if(_layout == null){
             for (POIXMLDocumentPart p : getRelations()) {

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java?rev=1829677&r1=1829676&r2=1829677&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xslf/extractor/TestXSLFPowerPointExtractor.java
 Fri Apr 20 20:00:46 2018
@@ -177,7 +177,6 @@ public class TestXSLFPowerPointExtractor
     }
 
     @Test
-    @Ignore("currently slidelayouts aren't yet supported")
        public void testGetMasterText() throws Exception {
            try (XMLSlideShow xml = openPPTX("WithMaster.pptx");
             SlideShowExtractor extractor = new SlideShowExtractor(xml)) {
@@ -205,13 +204,10 @@ public class TestXSLFPowerPointExtractor
             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);
         }

Modified: 
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java?rev=1829677&r1=1829676&r2=1829677&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java 
(original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java 
Fri Apr 20 20:00:46 2018
@@ -501,4 +501,12 @@ public final class HSLFSlide extends HSL
             return false;
         }
     }
+
+    @Override
+    public HSLFMasterSheet getSlideLayout(){
+        // TODO: find out how we can find the mastersheet base on the slide 
layout type, i.e.
+        // 
getSlideRecord().getSlideAtom().getSSlideLayoutAtom().getGeometryType()
+        return getMasterSheet();
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to