Author: nick
Date: Mon Feb 13 04:59:00 2006
New Revision: 377372

URL: http://svn.apache.org/viewcvs?rev=377372&view=rev
Log:
Friendly wrapper on HWPF for extracting text from Word Documents

Added:
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/test2.doc   
(with props)
    jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java
    
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java

Added: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/test2.doc
URL: 
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/test2.doc?rev=377372&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/test2.doc
------------------------------------------------------------------------------
    svn:executable = *

Propchange: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/data/test2.doc
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java
URL: 
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java?rev=377372&view=auto
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java
 (added)
+++ 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestDifferentRoutes.java
 Mon Feb 13 04:59:00 2006
@@ -0,0 +1,87 @@
+package org.apache.poi.hwpf.extractor;
+
+import java.io.FileInputStream;
+import java.util.Iterator;
+
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.model.TextPiece;
+import org.apache.poi.hwpf.usermodel.Paragraph;
+import org.apache.poi.hwpf.usermodel.Range;
+
+import junit.framework.TestCase;
+
+/**
+ * Test the different routes to extracting text
+ *
+ * @author Nick Burch (nick at torchbox dot com)
+ */
+public class TestDifferentRoutes extends TestCase {
+       private String[] p_text = new String[] {
+                       "This is a simple word document\r",
+                       "\r",
+                       "It has a number of paragraphs in it\r",
+                       "\r",
+                       "Some of them even feature bold, italic and underlined 
text\r",
+                       "\r",
+                       "\r",
+                       "This bit is in a different font and size\r",
+                       "\r",
+                       "\r",
+                       "This bit features some red text.\r",
+                       "\r",
+                       "\r",
+                       "It is otherwise very very boring.\r"
+       };
+       
+       private HWPFDocument doc;
+       
+    protected void setUp() throws Exception {
+               String dirname = System.getProperty("HWPF.testdata.path");
+               
+               String filename = dirname + "/test2.doc";
+               doc = new HWPFDocument(new FileInputStream(filename));
+    }                  
+    
+    /**
+     * Test model based extraction
+     */
+    public void testExtractFromModel() {
+       Range r = doc.getRange();
+       
+       String[] text = new String[r.numParagraphs()];
+       for(int i=0; i < r.numParagraphs(); i++) {
+               Paragraph p = r.getParagraph(i);
+               text[i] = p.text();
+       }
+       
+       assertEquals(p_text.length, text.length);
+       for(int i=0; i<p_text.length; i++) {
+               assertEquals(p_text[i], text[i]);
+       }
+    }
+    
+    /**
+     * Test textPieces based extraction
+     */
+    public void testExtractFromTextPieces() throws Exception {
+       StringBuffer textBuf = new StringBuffer();
+       
+       Iterator textPieces = doc.getTextTable().getTextPieces().iterator();
+       while (textPieces.hasNext()) {
+               TextPiece piece = (TextPiece) textPieces.next();
+
+               String encoding = "Cp1252";
+               if (piece.usesUnicode()) {
+                       encoding = "UTF-16LE";
+               }
+               String text = new String(piece.getRawBytes(), encoding);
+               textBuf.append(text);
+       }
+       
+       StringBuffer exp = new StringBuffer();
+       for(int i=0; i<p_text.length; i++) {
+               exp.append(p_text[i]);
+       }
+       assertEquals(exp.toString(), textBuf.toString());
+    }
+}

Added: 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java
URL: 
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java?rev=377372&view=auto
==============================================================================
--- 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java
 (added)
+++ 
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java
 Mon Feb 13 04:59:00 2006
@@ -0,0 +1,88 @@
+package org.apache.poi.hwpf.extractor;
+
+import java.io.FileInputStream;
+import java.util.Iterator;
+
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.model.TextPiece;
+import org.apache.poi.hwpf.usermodel.Paragraph;
+import org.apache.poi.hwpf.usermodel.Range;
+
+import junit.framework.TestCase;
+
+/**
+ * Test the different routes to extracting text
+ *
+ * @author Nick Burch (nick at torchbox dot com)
+ */
+public class TestWordExtractor extends TestCase {
+       private String[] p_text1 = new String[] {
+                       "This is a simple word document\r\n",
+                       "\r\n",
+                       "It has a number of paragraphs in it\r\n",
+                       "\r\n",
+                       "Some of them even feature bold, italic and underlined 
text\r\n",
+                       "\r\n",
+                       "\r\n",
+                       "This bit is in a different font and size\r\n",
+                       "\r\n",
+                       "\r\n",
+                       "This bit features some red text.\r\n",
+                       "\r\n",
+                       "\r\n",
+                       "It is otherwise very very boring.\r\n"
+       };
+       private String p_text1_block = new String();
+               
+       // Well behaved document
+       private WordExtractor extractor;
+       // Corrupted document - can't do paragraph based stuff
+       private WordExtractor extractor2;
+       
+    protected void setUp() throws Exception {
+               String dirname = System.getProperty("HWPF.testdata.path");
+               
+               String filename = dirname + "/test2.doc";
+               String filename2 = dirname + "/test.doc";
+               extractor = new WordExtractor(new FileInputStream(filename));
+               extractor2 = new WordExtractor(new FileInputStream(filename2));
+               
+               // Build splat'd out text version
+               for(int i=0; i<p_text1.length; i++) {
+                       p_text1_block += p_text1[i];
+               }
+    }                  
+    
+    /**
+     * Test paragraph based extraction
+     */
+    public void testExtractFromParagraphs() {
+       String[] text = extractor.getParagraphText();
+       
+       assertEquals(p_text1.length, text.length);
+       for(int i=0; i<p_text1.length; i++) {
+               assertEquals(p_text1[i], text[i]);
+       }
+       
+       // On second one, should fall back
+       assertEquals(1, extractor2.getParagraphText().length);
+    }
+    
+    /**
+     * Test the paragraph -> flat extraction
+     */
+    public void testGetText() {
+       assertEquals(p_text1_block, extractor.getText());
+       
+       // On second one, should fall back to text piece
+       assertEquals(extractor2.getTextFromPieces(), extractor2.getText());
+    }
+    
+    /**
+     * Test textPieces based extraction
+     */
+    public void testExtractFromTextPieces() throws Exception {
+       String text = extractor.getTextFromPieces();
+       assertEquals(p_text1_block, text);
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/

Reply via email to