在文檔服務器中存儲有成千上萬個文檔的情況下,用戶想要找到並打開包含特定關鍵字的文檔,無疑是一項艱鉅的任務。如何高效地管理和檢索大量的Word文檔呢?
在現有的技術解決方案中,許多方法都依賴於服務器端的Apache POI技術。這種技術的基本原理是,先將所有文檔的文本內容提取出來,然後存儲到數據庫中。當用戶需要打開文檔時,系統會通過SQL語句檢索數據庫,判斷文檔是否包含用戶指定的關鍵字。然而,這種解決方案存在明顯的弊端。首先,POI技術對Word文檔的支持並不完善,其提供的接口較爲單一且穩定性不足,對文檔格式的嚴格要求也增加了使用的難度。其次,將成千上萬個文檔的文本內容提取並存儲到數據庫中,這一操作本身就會對服務器的性能產生巨大的壓力,影響服務器的正常運行。
PageOffice提供了一種新的解決方案。它能夠在每次保存文件的時候獲取Word文檔的全文純文本內容,並將其保存到數據庫中。這樣,當用戶需要檢索包含特定關鍵字的文檔時,就可以直接通過數據庫的SQL語句來實現。更爲重要的是,PageOffice的這一功能是在客戶端執行的,也就是說,它將文檔的處理工作量從服務器端轉移到了客戶端,極大地減輕了服務器的負擔,既能夠滿足用戶對於文檔檢索的需求,又能夠保證服務器的穩定運行。
後端代碼
每次保存文檔的同時,獲取Word文檔中的純文本字符串並保存到數據庫,以後就可以簡單的利用SQL查詢輕鬆實現文檔管理中的全文檢索功能。
FileSaver fs = new FileSaver(request, response);
String strDocumentText = fs.getDocumentText();
// 您可以把strDocumentText保存到數據庫字段。保存到數據庫的代碼此處省略
fs.saveToFile(request.getRealPath("doc/" + fs.getFileName()));
fs.close();
前端代碼
在線打開Word文件之後,可以使用下面的SetKeyWord函數,設置Word文件中的所有的關鍵字高亮顯示。
function SetKeyWord(key,visible) {
if (key == "null" || "" == key) {
alert("關鍵字爲空。");
return;
}
let falg = true;
pageofficectrl.word.HomeKey(6);
while(falg){
if(pageofficectrl.word.FindNextText(key)){
if(visible){
pageofficectrl.word.SetHighlightToSelection(7);//高亮顯示
}else{
pageofficectrl.word.SetHighlightToSelection(0);//取消高亮
}
}else{
pageofficectrl.word.HomeKey(6)
break;
}
}
}
參考鏈接:Word全文檢索