java獲取word裏面的文本

需求場景

  開發的web辦公系統如果需要處理大量的Word文檔(比如有成千上萬個文檔),用戶一定提出查找包含某些關鍵字的文檔的需求,這就要求能夠讀取 word 中的文字內容,而忽略其中的文字樣式、表格、圖片等信息。

方案分析

  方案一:使用Apache POI技術將所有服務器上文檔的文本獲取後存儲到數據庫,查找文檔時利用sql語句檢索數據中存儲的文檔文本是否包含關鍵字來搜索到相關文檔。然而現在 microsoft word 有兩種文檔格式doc和docx,這兩個版本存儲數據的格式上都有相當大的差別。調研發現apache  POI針對doc和docx提供了兩套不同的API接口,需要針對兩種文檔格式編寫不同的代碼,word文檔自身格式複雜,讀取word文檔內容的代碼會對服務器造成一定的壓力,且無法實現讓用戶在線處理word文檔。 

  POI主頁地址:https://poi.apache.org/

  方案二:使用PageOffice組件的FileSaver對象的getDocumentText方法,獲取word文檔中的純文本內容,且如果調用PageOffice實現此功能的話,同時也可以實現word文件的在線編輯。

  

實現步驟

  1. 調用PageOffice在線打開word文件,比如:test.doc

複製代碼
PageOfficeCtrl poCtrl=new PageOfficeCtrl(request);
//設置服務器頁面
poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");
//設置保存頁面爲SaveFile.jsp,或SaveFile.do SaveFile.action 等action方法或RequestMapping方法均可
poCtrl.setSaveFilePage("SaveFile.jsp");
//打開Word文檔
poCtrl.webOpen("doc/test.doc",OpenModeType.docNormalEdit,"Tom");
複製代碼

  2. 在處理保存操作的頁面(SaveFile.jsp)或方法裏執行保存文件和獲取文檔中純文本內容的操作:

複製代碼
FileSaver fs=new FileSaver(request,response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/")+"/"+fs.getFileName());//保存文件
String strDocumentText = fs.getDocumentText();//獲取文檔的純文本內容,不帶任何附加格式 
// - 編寫代碼,保存文檔的文本內容到數據庫 - //
......
fs.close();
複製代碼

  3. 需要對全文檢索的時候,只需對數據庫中保存了word文件純文本內容的數據庫字段做SQL查詢即可。