Java開發在線編輯Word同時實現全文檢索

1、背景介紹html

    Word文檔與平常辦公密不可分,在實際應用中,當某一文檔服務器中有不少Word文檔,假若有成千上萬個文檔時,用戶查找打開包含某些指定關鍵字的文檔就變得很困難,通常狀況下能想到的解決方案是使用服務器端的Apache poi技術將全部文檔的文本獲取後存儲到數據庫,而後打開文檔時利用sql語句檢索文檔是否包含關鍵字來判斷是不是打開文檔。可是這種解決辦法有很大的弊端,首先poi技術對word文檔支持不是很好,其中支持word的接口單一併且不太穩定,對word文檔的格式也要求很高。其次若是將成千上萬個文檔使用poi將其文本內容存儲到數據庫這一操做將會在很大程度上影響服務器的性能。本文的方案採用PageOffice提供的獲取Word文檔全文純文本的功能,在每次編輯保存文件的同時,把Word文檔全文純文本提取出來保存到數據庫,利用數據庫sql語句檢索文檔是否包含關鍵字來實現這一需求。由於PageOffice獲取全文的純文本文檔是客戶端執行的,這樣就在很大程度上減輕了對服務器的壓力,提升了服務器的性能。web

2、主要實現代碼sql

  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,"張三");

複製代碼

  2. 在保存文件的頁面(SaveFile.jsp)或方法裏執行:服務器

複製代碼

FileSaver fs=new FileSaver(request,response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveAndSearch/doc/")+"/"+fs.getFileName());
fs.setCustomSaveResult("ok");
String strDocumentText = fs.getDocumentText();//獲取文檔的純文本內容,不帶任何附加格式 
//--開始    更新數據庫中文檔的文本內容,以SQLite數據庫爲例 ---
  int  id=Integer.parseInt(request.getParameter("id"));
  Class.forName("org.sqlite.JDBC");
  String strUrl = "jdbc:sqlite:"
            + this.getServletContext().getRealPath("demodata/") + "\\SaveAndSearch.db";
  Connection conn = DriverManager.getConnection(strUrl);
  Statement stmt = conn.createStatement();
  String strsql="update word set Content='"+strDocumentText+"' where id="+id;
  stmt.executeUpdate(strsql);
  stmt.close();
  conn.close();
//--結束    更新數據庫中文檔的文本內容 ---
fs.close();

複製代碼

  3. 須要對全文檢索的時候,只需對數據庫中保存了word文件純文本內容的Content字段作查詢便可實現。app

3、示例說明jsp

  1. 下載地址:http://www.zhuozhengsoft.com/dowm/,下載PageOffice  for JAVA 開發包性能

  2. 示例部署:解壓PageOffice開發包,拷貝Samples4文件夾到Tomcat的Webapps目錄下,訪問:http://localhost:8080/Samples4/index.html,查看示例演示:3、1四、全文搜索包含關鍵字的Word文檔this

相關文章
相關標籤/搜索