zoukankan      html  css  js  c++  java
  • [原创]Java开发在线编辑Word同时实现全文检索

    一、背景介绍

        Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,一般情况下能想到的解决方案是使用服务器端的Apache poi技术将所有文档的文本获取后存储到数据库,然后打开文档时利用sql语句检索文档是否包含关键字来判断是否是打开文档。但是这种解决办法有很大的弊端,首先poi技术对word文档支持不是很好,其中支持word的接口单一而且不太稳定,对word文档的格式也要求很高。其次如果将成千上万个文档使用poi将其文本内容存储到数据库这一操作将会在很大程度上影响服务器的性能。本文的方案采用PageOffice提供的获取Word文档全文纯文本的功能,在每次编辑保存文件的同时,把Word文档全文纯文本提取出来保存到数据库,利用数据库sql语句检索文档是否包含关键字来实现这一需求。因为PageOffice获取全文的纯文本文档是客户端执行的,这样就在很大程度上减轻了对服务器的压力,提高了服务器的性能。

    二、主要实现代码

      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字段做查询即可实现。

    三、示例说明

      1. 下载地址:http://www.zhuozhengsoft.com/dowm/,下载PageOffice  for JAVA 开发包

      2. 示例部署:解压PageOffice开发包,拷贝Samples4文件夹到Tomcat的Webapps目录下,访问:http://localhost:8080/Samples4/index.html,查看示例演示:三、14、全文搜索包含关键字的Word文档

  • 相关阅读:
    快手记录的面试题2
    快手Java实习一二面经(记录的面试题1)
    219. 存在重复元素 II(面试题也考过)
    117. 填充每个节点的下一个右侧节点指针 II(没想到,但是其实蛮简单的)
    116. 填充每个节点的下一个右侧节点指针
    最后来几个快手的面试题吧,先记录下来大概看看
    快手Java实习一二面面经(转载)
    双亲委派模型
    聚集索引与非聚集索引总结(转载)
    136. 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/ziwuxian/p/8966222.html
Copyright © 2011-2022 走看看