## **Word文档全文检索**
### **一、 背景介绍**
Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,目前网络上能找到的解决方案多是使用服务器端的Apache POI技术将所有文档的文本获取后存储到数据库,然后打开文档时利用sql语句检索文档是否包含关键字来判断是否是打开文档。但是这种解决办法有很大的弊端,首先POI技术对word文档支持不是很好,其中支持word的接口单一而且不太稳定,对word文档的格式也要求很高。其次如果将成千上万个文档使用poi将其文本内容存储到数据库这一操作将会在很大程度上影响服务器的性能。
PageOffice提供了获取Word文档全文纯文本的功能,可以把获取到的文本内容保存到数据库,利用数据库sql语句检索文档是否包含关键字来实现这一需求。PageOffice获取文档纯文本的工作是客户端执行的,这样就在很大程度上减轻了对服务器的压力,提高了服务器的性能。
### **二、主要实现代码**
获取Word文档中的纯文本文件(不带任何附加格式)并保存到数据库,以后就可以简单的利用SQL查询轻松实现文档管理中的全文检索功能。
Java代码:
~~~
FileSaver fs = new FileSaver(request, response);
String strDocumentText = fs.getDocumentText();
// 您可以把此文本字符串保存到数据库字段。保存到数据库的代码此处省略
fs.saveToFile(request.getRealPath("doc/") + "/" + fs.getFileName());
fs.Close();
~~~
ASP.NET代码:
~~~
PageOffice.FileSaver fs = new PageOffice.FileSaver();
string strDocumentText = fs.DocumentText;
// 您可以把此文本字符串保存到数据库字段。保存到数据库的代码此处省略
fs.SaveToFile(Server.MapPath("doc/") + fs.FileName);
fs.Close();
~~~
>[danger]注意:此属性目前仅适用于Word。
### **三、示例说明**
>[info]请参考PageOffice开发包中Samples4示例的综合演示:
>三、全文搜索包含关键字的Word文档(专业版、企业版)
获取文档中的纯文本保存到数据库,根据关键字检索文档中是否包含该关键字。
1) 数据库中的文档的存储结构说明(以access数据库为例)。

2) 搜索包含关键字的文档,以列表显示文档名。

3) 打开编辑包含关键字的文档,并且高亮显示关键字。

高亮显示的主要js代码:
~~~js
var sMac = "function myfunc()" + "\r\n"
+ " Application.Selection.HomeKey(6) \r\n"
+ " Application.Selection.Find.ClearFormatting \r\n"
+ " Application.Selection.Find.Replacement.ClearFormatting \r\n"
+ " Application.Selection.Find.Text = \"" + key + "\" \r\n"
+ " While (Application.Selection.Find.Execute()) \r\n"
+ " If (" + visible + ") Then \r\n"
+ " Application.Selection.Range.HighlightColorIndex = 7 \r\n"
+ " Else \r\n"
+ " Application.Selection.Range.HighlightColorIndex = 0 \r\n"
+ " End If \r\n"
+ " Wend \r\n"
+ " Application.Selection.HomeKey(6) \r\n"
+ "End function";
document.getElementById("PageOfficeCtrl1").RunMacro("myfunc", sMac);
~~~
- 序言
- 产品简介
- PageOffice试用版和和正式版的区别
- PageOffice对客户端的要求
- PageOffice客户端安装步骤
- PageOffice常用功能与工作原理
- OA系统中的文档在线编辑及流转
- 痕迹保留、键盘批注、手写批注
- 文件并发控制功能
- 与数据库的关系
- SaveDataPage和SaveFilePage的区别
- 调用ZoomSeal签章系统中的印章
- 使用RunMacro运行Office的宏
- 为什么采用弹窗方式打开文件
- POBrowser弹窗方式的具体使用
- Word篇
- 常用接口对象
- WordDocument类
- DataRegion类
- DataTag类
- Paragraph类
- Shape类
- Table类
- Column类
- Row类
- Cell类
- WaterMark类
- DataRegion与DataTag的区别
- 编辑模板中的数据区域
- 动态填充Word文档
- 动态插入Word表格
- 动态创建数据区域
- 数据区域点击事件
- 实现Word文档编辑区域控制
- Word文档全文检索
- Word文件版本对比功能
- 实现用户自定义Word模板
- 实现多个Word文件合并
- Excel篇
- 常用接口对象
- Workbook类
- Sheet类
- Table类
- Cell类
- 动态填充Excel文档
- Excel指定单元格点击事件
- 实现用户自定义Excel模板
- 读取Excel文档中的数据
- 隐藏Excel的行号列标
- Java篇
- PageOffice集成说明
- 动态生成Word文件
- 给Word中的Table赋值
- 动态生成Excel文件
- Maven项目中引用PageOffice
- FileMaker组件功能简介
- ASP.NET篇
- PageOffice集成说明
- 给Word中的Table赋值
- 动态生成Word文档
- FileMaker组件功能简介
- 其他
- POPDF组件功能简介
- PPT相关功能简介
- 实现多人同时编辑一份文档
- PageOffice与Apache POI的区别
- 如何录制宏和编辑宏
- PDF篇
- PDF盖章