// 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");
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;
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));
+ }
}