標籤:分享 ssi mapping pre org code real sql語句 poc
需求情境
開發的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查詢即可。
[轉載]java擷取word裡面的文本