關鍵字:POI JAVA 批注 總頁數 總字符數
一:認識POI
Apache POI是一個開源的利用Java讀寫Excel、WORD等微軟OLE2組件文檔的項目。最新的3.5版本有很多改進,加入了對采用OOXML格式的Office 2007支持,如xlsx、docx、pptx文檔。
POI主頁:poi.apache.org/
二:POI3.5相關下載
3.5Jar包下載地址
3.5源碼下載地址
三:POI組成部分概覽
以下是POI的幾個重要組成部分,以及各組件的功能概述。
POIFS
POIFS是該項目的最古老,最穩定的一部分。.這是格式化OLE 2復合文檔為純Java的接口。 它同時支持讀寫功能。所有的組件,最終都依賴於它的定義
HSSF 和 XSSF
HSSF: MS-Excel 97-2003(.xls),基於BIFF8格式的JAVA接口。
XSSF:MS-Excel 2007+(.xlsx),基於OOXML格式的JAVA接口。
HWPF 和XWPF
HWPF: MS-Word 97-2003(.doc),基於BIFF8格式的JAVA接口。只支持.doc文件簡單的操作,讀寫能力有限。本API為POI項目早期開發,很不幸的 是主要負責HWPF模塊開發的工程師-“Ryan Ackley”已經離開Apache組織,現在該模塊沒有人維護、更新、完善。
XWPF:MS-Word 2007+(.docx),基於OOXML格式的JAVA接口。較HWPF功能完善。
四:利用POI提取Word文本內容及批注
97-2003:
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文檔建立解決方案的方式