]> source.dussan.org Git - poi.git/commitdiff
With help from Yegor, fix bug #45537 - Include headers and footers (of slides and...
authorNick Burch <nick@apache.org>
Tue, 5 Aug 2008 22:49:24 +0000 (22:49 +0000)
committerNick Burch <nick@apache.org>
Tue, 5 Aug 2008 22:49:24 +0000 (22:49 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@683020 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/scratchpad/src/org/apache/poi/hslf/extractor/PowerPointExtractor.java
src/scratchpad/src/org/apache/poi/hslf/model/HeadersFooters.java
src/scratchpad/testcases/org/apache/poi/hslf/extractor/TextExtractor.java

index 76d4b0e6e87536e6ae3d79dff32bd7f3f95131f7..1119b76d02ef13799ec2fb753e8d2c28074a1ef5 100644 (file)
@@ -37,6 +37,7 @@
 
                <!-- Don't forget to update status.xml too! -->
         <release version="3.1.1-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="add">45537 - Include headers and footers (of slides and notes) in the extracted text from HSLF</action>
            <action dev="POI-DEVELOPERS" type="fix">45472 - Fixed incorrect default row height in OpenOffice 2.3</action>
            <action dev="POI-DEVELOPERS" type="fix">44692 - HSSFPicture.resize() stretched image when there was a text next to it</action>
            <action dev="POI-DEVELOPERS" type="add">45543 - Optionally extract comment text with PowerPointExtractor, and initial hslf model support for comments</action>
index 8edb88bd1b787c59c1686bced2630659db131e74..cf5dc669f8f4f110a8ecc70d1792e4377f767bbf 100644 (file)
@@ -34,6 +34,7 @@
        <!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.1.1-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="add">45537 - Include headers and footers (of slides and notes) in the extracted text from HSLF</action>
            <action dev="POI-DEVELOPERS" type="fix">45472 - Fixed incorrect default row height in OpenOffice 2.3</action>
            <action dev="POI-DEVELOPERS" type="fix">44692 - HSSFPicture.resize() stretched image when there was a text next to it</action>
            <action dev="POI-DEVELOPERS" type="add">45543 - Optionally extract comment text with PowerPointExtractor, and initial hslf model support for comments</action>
index 95900a45efa4b495c58bb39f4ee7942dc44cd62b..865471eefe745f44618c8da0308b3502722476e4 100644 (file)
@@ -176,11 +176,13 @@ public class PowerPointExtractor extends POIOLE2TextExtractor
                for(int i=0; i<_slides.length; i++) {
                        Slide slide = _slides[i];
                        
+                       // Slide header, if set
                        HeadersFooters hf = slide.getHeadersFooters();
-                       if(hf != null && hf.getHeaderText() != null) {
+                       if(hf != null && hf.isHeaderVisible() && hf.getHeaderText() != null) {
                                ret.append(hf.getHeaderText() + "\n");
                        }
                        
+                       // Slide text
                        TextRun[] runs = slide.getTextRuns();
                        for(int j=0; j<runs.length; j++) {
                                TextRun run = runs[j];
@@ -193,10 +195,12 @@ public class PowerPointExtractor extends POIOLE2TextExtractor
                                }
                        }
                        
-                       if(hf != null && hf.getFooterText() != null) {
+                       // Slide footer, if set
+                       if(hf != null && hf.isFooterVisible() && hf.getFooterText() != null) {
                                ret.append(hf.getFooterText() + "\n");
                        }
                        
+                       // Comments, if requested and present
                        if(getCommentText) {
                                Comment[] comments = slide.getComments();
                                for(int j=0; j<comments.length; j++) {
@@ -219,13 +223,21 @@ public class PowerPointExtractor extends POIOLE2TextExtractor
                //  master sheets in. Grab Slide list, then work from there,
                //  but ensure no duplicates
                HashSet seenNotes = new HashSet();
+               HeadersFooters hf = _show.getNotesHeadersFooters();
+               
                for(int i=0; i<_slides.length; i++) {
                        Notes notes = _slides[i].getNotesSheet();
                        if(notes == null) { continue; }
                        Integer id = new Integer(notes._getSheetNumber());
                        if(seenNotes.contains(id)) { continue; }
                        seenNotes.add(id);
+                       
+                       // Repeat the Notes header, if set
+                       if(hf != null && hf.isHeaderVisible() && hf.getHeaderText() != null) {
+                               ret.append(hf.getHeaderText() + "\n");
+                       }
 
+                       // Notes text
                        TextRun[] runs = notes.getTextRuns();
                        if(runs != null && runs.length > 0) {
                                for(int j=0; j<runs.length; j++) {
@@ -237,6 +249,11 @@ public class PowerPointExtractor extends POIOLE2TextExtractor
                                        }
                                }
                        }
+                       
+                       // Repeat the notes footer, if set
+                       if(hf != null && hf.isFooterVisible() && hf.getFooterText() != null) {
+                               ret.append(hf.getFooterText() + "\n");
+                       }
                }
        }
 
index e94bcb981ae1348f5dcaadc000b936a687e1ac37..90aee3421d0e14b9ce890e2be52a04978bd93468 100644 (file)
@@ -22,6 +22,8 @@ import org.apache.poi.hslf.usermodel.SlideShow;
 \r
 /**\r
  * Header / Footer settings.\r
+ * \r
+ * You can get these on slides, or across all notes\r
  *\r
  * @author Yegor Kozlov\r
  */\r
index 2fbdb6af9217feb69318bc4b93e2caab8bb539a6..fe995fe12115c0d80cae4ca10c09646d3a91602a 100644 (file)
@@ -253,32 +253,42 @@ public class TextExtractor extends TestCase {
     /**
      * From bug #45537
      */
-    public void DISABLEDtestHeaderFooter() throws Exception {
+    public void testHeaderFooter() throws Exception {
                String filename, text;
                
-               // With a header
+               // With a header on the notes
                filename = dirname + "/45537_Header.ppt";
                HSLFSlideShow hslf = new HSLFSlideShow(new FileInputStream(filename));
                SlideShow ss = new SlideShow(hslf);
-               assertNotNull(ss.getSlides()[0].getHeadersFooters());
-               assertEquals("testdoc test phrase", ss.getSlides()[0].getHeadersFooters().getHeaderText());
+               assertNotNull(ss.getNotesHeadersFooters());
+               assertEquals("testdoc test phrase", ss.getNotesHeadersFooters().getHeaderText());
                
                ppe = new PowerPointExtractor(hslf);
 
+               text = ppe.getText();
+               assertFalse("Unable to find expected word in text\n" + text, text.contains("testdoc"));
+        assertFalse("Unable to find expected word in text\n" + text, text.contains("test phrase"));
+        
+        ppe.setNotesByDefault(true);
                text = ppe.getText();
                assertTrue("Unable to find expected word in text\n" + text, text.contains("testdoc"));
         assertTrue("Unable to find expected word in text\n" + text, text.contains("test phrase"));
 
         
-               // And with a footer
+               // And with a footer, also on notes
                filename = dirname + "/45537_Footer.ppt";
                hslf = new HSLFSlideShow(new FileInputStream(filename));
                ss = new SlideShow(hslf);
-               assertNotNull(ss.getSlides()[0].getHeadersFooters());
-               assertEquals("testdoc test phrase", ss.getSlides()[0].getHeadersFooters().getFooterText());
+               assertNotNull(ss.getNotesHeadersFooters());
+               assertEquals("testdoc test phrase", ss.getNotesHeadersFooters().getFooterText());
                
                ppe = new PowerPointExtractor(filename);
 
+               text = ppe.getText();
+               assertFalse("Unable to find expected word in text\n" + text, text.contains("testdoc"));
+        assertFalse("Unable to find expected word in text\n" + text, text.contains("test phrase"));
+
+        ppe.setNotesByDefault(true);
                text = ppe.getText();
                assertTrue("Unable to find expected word in text\n" + text, text.contains("testdoc"));
         assertTrue("Unable to find expected word in text\n" + text, text.contains("test phrase"));