PageOffice6 实现 word 全文检索

在文档服务器中存储有成千上万个文档的情况下,用户想要找到并打开包含特定关键字的文档,无疑是一项艰巨的任务。如何高效地管理和检索大量的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全文检索

posted on 2024-04-07 14:47  qianxi  阅读(12)  评论(0编辑  收藏  举报