開發的web辦公系統若是須要處理大量的Word文檔(好比有成千上萬個文檔),用戶必定提出查找包含某些關鍵字的文檔的需求,這就要求可以讀取 word 中的文字內容,而忽略其中的文字樣式、表格、圖片等信息。web
方案一:使用Apache POI技術將全部服務器上文檔的文本獲取後存儲到數據庫,查找文檔時利用sql語句檢索數據中存儲的文檔文本是否包含關鍵字來搜索到相關文檔。然而如今 microsoft word 有兩種文檔格式doc和docx,這兩個版本存儲數據的格式上都有至關大的差異。調研發現apache POI針對doc和docx提供了兩套不一樣的API接口,須要針對兩種文檔格式編寫不一樣的代碼,word文檔自身格式複雜,讀取word文檔內容的代碼會對服務器形成必定的壓力,且沒法實現讓用戶在線處理word文檔。 sql
POI主頁地址:https://poi.apache.org/數據庫
方案二:使用PageOffice組件的FileSaver對象的getDocumentText方法,獲取word文檔中的純文本內容,且若是調用PageOffice實現此功能的話,同時也能夠實現word文件的在線編輯。apache
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)或方法裏執行保存文件和獲取文檔中純文本內容的操做:app
FileSaver fs=new FileSaver(request,response); fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/")+"/"+fs.getFileName());//保存文件 String strDocumentText = fs.getDocumentText();//獲取文檔的純文本內容,不帶任何附加格式 // - 編寫代碼,保存文檔的文本內容到數據庫 - // ...... fs.close();
3. 須要對全文檢索的時候,只需對數據庫中保存了word文件純文本內容的數據庫字段作SQL查詢便可。jsp