From: Tim Allison Date: Fri, 27 Sep 2013 15:45:55 +0000 (+0000) Subject: POI-54722 table text in ppt files X-Git-Tag: REL_3_10_FINAL~108 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6e50bfa19d8305b6f4f379bc952c005f9df2691d;p=poi.git POI-54722 table text in ppt files git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1526960 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java b/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java index 6610cde2ce..f416d63907 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java +++ b/src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java @@ -252,6 +252,12 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor { // Slide text textRunsToText(ret, slide.getTextRuns()); + // Table text + for (Shape shape : slide.getShapes()){ + if (shape instanceof Table){ + extractTableText(ret, (Table)shape); + } + } // Slide footer, if set if (hf != null && hf.isFooterVisible() && hf.getFooterText() != null) { ret.append(hf.getFooterText() + "\n"); @@ -306,6 +312,23 @@ public final class PowerPointExtractor extends POIOLE2TextExtractor { return ret.toString(); } + private void extractTableText(StringBuffer ret, Table table) { + for (int row = 0; row < table.getNumberOfRows(); row++){ + for (int col = 0; col < table.getNumberOfColumns(); col++){ + TableCell cell = table.getCell(row, col); + //defensive null checks; don't know if they're necessary + if (cell != null){ + String txt = cell.getText(); + txt = (txt == null) ? "" : txt; + ret.append(txt); + if (col < table.getNumberOfColumns()-1){ + ret.append("\t"); + } + } + } + ret.append('\n'); + } + } private void textRunsToText(StringBuffer ret, TextRun[] runs) { if (runs==null) { return; diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java b/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java index b0cf1c3bd0..ab1076c458 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/extractor/TestExtractor.java @@ -367,4 +367,23 @@ public final class TestExtractor extends POITestCase { assertEquals(expectText, extractor.getText()); } } + + public void testTable() throws Exception{ + ppe = new PowerPointExtractor(slTests.openResourceAsStream("54111.ppt")); + String text = ppe.getText(); + String target = "TH Cell 1\tTH Cell 2\tTH Cell 3\tTH Cell 4\n"+ + "Row 1, Cell 1\tRow 1, Cell 2\tRow 1, Cell 3\tRow 1, Cell 4\n"+ + "Row 2, Cell 1\tRow 2, Cell 2\tRow 2, Cell 3\tRow 2, Cell 4\n"+ + "Row 3, Cell 1\tRow 3, Cell 2\tRow 3, Cell 3\tRow 3, Cell 4\n"+ + "Row 4, Cell 1\tRow 4, Cell 2\tRow 4, Cell 3\tRow 4, Cell 4\n"+ + "Row 5, Cell 1\tRow 5, Cell 2\tRow 5, Cell 3\tRow 5, Cell 4\n"; + assertTrue(text.contains(target)); + + ppe = new PowerPointExtractor(slTests.openResourceAsStream("54722.ppt")); + text = ppe.getText(); + + target = "this\tText\tis\twithin\ta\n"+ + "table\t1\t2\t3\t4"; + assertTrue(text.contains(target)); + } } diff --git a/test-data/slideshow/54722.ppt b/test-data/slideshow/54722.ppt new file mode 100644 index 0000000000..c62a60b2e8 Binary files /dev/null and b/test-data/slideshow/54722.ppt differ