Index: test-data/slideshow/master_text.ppt =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java =================================================================== --- src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java (revision 1198818) +++ src/scratchpad/src/org/apache/poi/hslf/model/Sheet.java (working copy) @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Vector; import java.awt.*; /** @@ -122,7 +121,7 @@ * For a given PPDrawing, grab all the TextRuns */ public static TextRun[] findTextRuns(PPDrawing ppdrawing) { - Vector runsV = new Vector(); + final List runsV = new ArrayList(); EscherTextboxWrapper[] wrappers = ppdrawing.getTextboxWrappers(); for (int i = 0; i < wrappers.length; i++) { int s1 = runsV.size(); @@ -132,15 +131,11 @@ findTextRuns(wrappers[i].getChildRecords(), runsV); int s2 = runsV.size(); if (s2 != s1){ - TextRun t = (TextRun) runsV.get(runsV.size()-1); + TextRun t = runsV.get(runsV.size()-1); t.setShapeId(wrappers[i].getShapeId()); } } - TextRun[] runs = new TextRun[runsV.size()]; - for (int i = 0; i < runs.length; i++) { - runs[i] = (TextRun) runsV.get(i); - } - return runs; + return runsV.toArray(new TextRun[runsV.size()]); } /** @@ -151,7 +146,7 @@ * @param records the records to build from * @param found vector to add any found to */ - protected static void findTextRuns(Record[] records, Vector found) { + protected static void findTextRuns(Record[] records, List found) { // Look for a TextHeaderAtom for (int i = 0, slwtIndex=0; i < (records.length - 1); i++) { if (records[i] instanceof TextHeaderAtom) { Index: src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java =================================================================== --- src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java (revision 1198818) +++ src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java (working copy) @@ -221,7 +221,22 @@ if (getSlideText) { if (getMasterText) { for (SlideMaster master : _show.getSlidesMasters()) { - textRunsToText(ret, master.getTextRuns()); + for(Shape sh : master.getShapes()){ + if(sh instanceof TextShape){ + if(MasterSheet.isPlaceholder(sh)) { + // don't bother about boiler + // plate text on master + // sheets + continue; + } + TextShape tsh = (TextShape)sh; + String text = tsh.getText(); + ret.append(text); + if (!text.endsWith("\n")) { + ret.append("\n"); + } + } + } } } Index: src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java =================================================================== --- src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java (revision 1198818) +++ src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java (working copy) @@ -292,14 +292,16 @@ // Initially not there String text = ppe.getText(); - assertFalse(text.contains("Master Header Text")); + assertFalse(text.contains("Text that I added to the master slide")); // Enable, shows up ppe.setMasterByDefault(true); text = ppe.getText(); - assertTrue(text.contains("Master Header Text")); + assertTrue(text.contains("Text that I added to the master slide")); + + // Make sure placeholder text does not come out + assertFalse(text.contains("Click to edit Master")); - // Now with another file only containing master text // Will always show up String masterText = "Footer from the master slide";