You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2018/04/20 20:00:46 UTC

svn commit: r1829677 - in /poi/trunk/src: java/org/apache/poi/sl/extractor/ java/org/apache/poi/sl/usermodel/ ooxml/java/org/apache/poi/xslf/usermodel/ ooxml/testcases/org/apache/poi/xslf/extractor/ scratchpad/src/org/apache/poi/hslf/usermodel/

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: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org