開發的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查詢即可。