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

相关文章
相关标签/搜索