import org.apache.poi.POITextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; //得到.doc文件提取器 org.apache.poi.hwpf.extractor.WordExtractor doc = new WordExtractor(new FileInputStream(filePath)); //提取.doc正文文本 String text = doc.getText(); //提取.doc批注 String[] comments = doc. getCommentsText(); 2007 import org.apache.poi.POITextExtractor; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFComment; import org.apache.poi.xwpf.usermodel.XWPFDocument; //得到.docx文件提取器 org.apache.poi.xwpf.extractor.XWPFWordExtractor docx = new XWPFWordExtractor(POIXMLDocument.openPackage(filePath)); //提取.docx正文文本 String text = docx.getText(); //提取.docx批注 org.apache.poi.xwpf.usermodel.XWPFComment[] comments = docx.getDocument()).getComments(); for(XWPFComment comment:comments){ comment.getId();//提取批注Id comment.getAuthor();//提取批注修改人 comment.getText();//提取批注內容 } 五:利用POI提取Word總頁數、總字符數... 97-2003 WordExtractor doc = new WordExtractor(new FileInputStream(filePath));//.doc格式Word文件提取器 int pages = doc.getSummaryInformation().getPageCount();//總頁數 int wordCount = doc.getSummaryInformation().getWordCount();//總字符數 2007: XWPFDocument docx = nnew XWPFDocument(POIXMLDocument.openPackage(filePath)); int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//總頁數 int characters = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的總字符數 另外還有getCharactersWithSpaces()方法獲取帶空格的總字數。
小技巧:
2007采用了全新的OFFICE OPEN XML格式來存儲,跟以前二進制文件格式的office 97-2003(.doc、.xls...)不同,所以可以直接重命名xx.docx的文件為xx.zip,用WinRar打開可以看到office2007的存儲文件,其中word/document.xml里面保存了最重要的正文內容,word/comments.xml保存的是批注內容,可以多研究一下這些文件,有助于開發~
Office Open XML 文件格式簡介 www.microsoft.com/china/msdn/library/office/office/OfficeOpenXMLFormats.mspx
隨著20世紀90年代XML的出現,企業計算客戶開始逐漸認識到,在他們所依賴的計算機產品和應用中采用開放的格式和標準所帶來的商業價值。IT專業人員將從通用的數據格式中受益匪淺,這種格式可能是XML,因為它擁有被應用程序、平臺和Internet瀏覽器讀取的能力。
同樣,隨著在Microsoft Office 2000中對于XML格式的支持與采用,開發人員開始認識到,他們需要將以前的Microsoft Office版本中的二進制文件格式轉換為XML格式。二進制文件(.doc,.dot,.xls,以及.ppt文件)在過去幾年中一直肩負著存儲和轉換數據的重任,而現在它們無法滿足新的市場需求的挑戰,其中包括輕松地在異構應用之間傳遞數據,以及允許用戶從這些數據中搜集商業信息。
2007 Microsoft Office system為Microsoft Office Excel 2007,Microsoft Office Word 2007,和Microsoft Office PowerPoint 2007采用了基于XML的文件格式,從而延續了這種轉移。新的文件格式,稱為Office Open XML格式,解決了上述市場需求的問題,同時改變了您基于Microsoft Office文檔建立解決方案的方式
POI是Apache的一個開源項目,可以到Apache網站下載相應的jar包文件,及其源文件。
POI提供了提取一些非TXT文本中文本內容的API,比如提取Word,Excel等,使用起來非常方便。
為了說明POI提起Word文件的方便和簡單,通過提取一個Word文件的文本來,來了解POI API的功能。
假設在本地磁盤中存在一個Word文件
E:\POI\word\JBoss3.0 下配置和部署EJB簡介.doc文件是具有格式的,內容如圖所示:
下面看看提取它的內容是多么簡單。
首先從Apache網站上下載POI的相關jar包。
新建一個測試類:
package org.shirdrn.word; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.poi.hwpf.extractor.WordExtractor; public class MyWordExtractor { public static void main(String[] args) { File file = new File("E:\\POI\\word\\JBoss3.0 下配置和部署EJB簡介.doc"); try { FileInputStream fis = new FileInputStream(file); WordExtractor wordExtractor = new WordExtractor(fis); System.out.println("【 使用getText()方法提取的Word文件的內容如下所示:】"); System.out.println(wordExtractor.getText()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
?
提取Word文件的文本內容,打印到控制臺上,如下所示:
使用WordExtractor類的getTextFromPieces()方法提取:
wordExtractor.getTextFromPieces();
結果和上面是一樣的。
WordExtractor類還有一個可以提取Word文件的各個段落的方法getParagraphText(),返回一個String[]數組,數組中每個元素為一個段的文本內容。
這里,對Word文件中換行也看成是一個段,測試如下:
package org.shirdrn.word; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.poi.hwpf.extractor.WordExtractor; public class MyWordExtractor { public static void main(String[] args) { File file = new File("E:\\POI\\word\\JBoss3.0 下配置和部署EJB簡介.doc"); try { FileInputStream fis = new FileInputStream(file); WordExtractor wordExtractor = new WordExtractor(fis); System.out.println("【 使用getText()方法提取的Word文件的內容如下所示:】"); String[] paragraph = wordExtractor.getParagraphText(); System.out.println("該Word文件共有"+paragraph.length+"段。"); for(int i=0;i<paragraph.length;i++){ System.out.println("< 第 "+(i+1)+" 段的內容為 >"); System.out.println(paragraph[i]); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
提取Word文件的文本內容,打印到控制臺上,如下所示:
從上面的Word文件可以看出,最后一行是Word文件的一個換行符,使用WordExtractor提取時,也把它默認成為一個段,因為一個段結束后應該有一個回車換行符。
如果有多個Word文件,而且放在不同的目錄下,要提取它們的文本內容,可以實現一個遞歸的函數,通過深度遍歷,為每一個Word文件進行提取。
如果需要,可以將提取到的Word文件的文本內容輸出到本地磁盤中,比如以txt記事本的根式保存。
從上面可以看出,提取Word文件的文本內容,實際上是將Word文件的格式去掉了,獲取到文本的內容。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
