.Net开发的Word抽取工具介绍

Word抽取工具

       在某项目中,我们需要实现java程序与MS Word的交互,虽然现在有一些开源类库(如:jacob)可以操作word,但是所提供的API接口毕竟数量有限,操作word时还有诸多不便。

       由于MS .NetMS Word出自一家,都是微软的重要产品,在官方的API中也可以看到,.NETWord的支持接口非常多,调用起来特别方便。所以我们在.NET平台下开发了一个Word抽取工具,该工具通过命令行的调用方式来实现与Word的交互。调用关系如下:

       Java程序->Word抽取工具(.NET->通过APIWord交互

       在该项目中,我们实现了对Word以下的交互内容,由于保密的因素,这里就不再截图了,只是描述我们实现的功能。

1.提取word正文

在该项目中,我们需要对word的正文进行全文检索,所以需要通过Word抽取工具把Word正文内容抽取到文本文件中,并读入到TRSServer库中进行全文检索。

抽取word正文的命令为:

抽取工具.exe –c D:\XXXX\source.docD:\YYYY\result.txt

Source.doc是要抽取的word文件的绝对地址

Result.txtword正文抽取后的存放地址,该文件的编码格式为UTF-8

2. 提取指定名称的word大纲视图

在项目中,多个地方需要抽取指定名称大纲下的内容,所以我们开发了抽取word大纲内容的接口。根据传入的大纲名称,匹配出需要提取的大纲内容并对内容进行分析,把分析结果存储到指定的文件中以返回给客户端使用。

3. 设置书签名称和书签内容

书签是word中非常好用的一个功能,当我们需要对word中某些固定的内容进行替换时,我们采用先给需要替换的内容增加上一个标签,每次需要替换这块内容的直接查找指定名称的标签,找到标签后直接设置标签的值即可。

在项目中,我们通过传入txt文本来描述标签的名称与值的映射关系,内容如下:

REPLACE=XXXX

CHINESE_NAME=我是中文名

ENGLISH_NAME=yingwenming

PUBLISH_TIME=201XXXXX

PERFORM_TIME=201XXXXX

Word抽取工具会把word中指定名的标签替换为指定的结果内容,这里同样可以对word文档的页眉和页脚进行替换。

4. 导入word内容到数据库

在项目中,客户要求我们对计划、里程碑等信息都采用word的方式来存储,能够导入到我们的系统中,并形成结构化的数据存入到数据库中。这就要求我们需要对word正文中的内容进行抽取、分析,最终形成结构化的数据。我们采用的策略是:

Word文件->Word抽取工具->xml格式数据结果

通过Word抽取工具把Word文件转换为xml格式的数据文件,java应用通过读取xml数据格式文件并把结果存入到关系数据库。下面是导入格式数据中一种,如下图:

 

任务

201311

201312

20141

20142

20143

20144

备注

任务1

征求意见

召开预审会

提交上级部门

提交审批部门

提交验收部门

完成验收

 

任务2

召开预审会

 

 

 

 

 

 

 

5. Xml数据写入到word表格中

对于关系数据库中的数据,客户希望我们能够导出到word中,经过简单的调整后即可打印以便开会时使用。针对这部分功能,我们采取先把关系数据库中的数据封装成xml数据后送入Word抽取工具进行解析,Word抽取工具把传入的xml数据写入到word中。整体流程如下:

              关系数据库->xml格式数据->Word抽取工具->写入Word文件

              写入word文件时,我们项目中使用比较多的就是把结构化数据写入到Word表格中。

6. Word后缀名转换为其他格式的Word

通过Word抽取工具,我们很容易实现把xxx.doc转换为xxx.docx或者把xxx.docx转换为xxx.doc文件。

              Doc格式是word 2003或者更早期的存储格式。

Docx格式是word2007及以后版本的存储格式。

当我们不确定客户端word版本时,可以通过该方法把docx的格式文件转化为doc格式的文件,从docx转换为doc格式,虽然有些对象在doc格式中是不支持的,但是word会把一些对象转化为doc格式中的替代格式。从doc格式转换为docx的格式是不会有兼容问题的。

这个功能总的来说就是通过命令行的方式来调用“Word中的另存为”功能。通过命令行的方式,java程序调用非常方便。

7. 设置Word的高级自定义属性

word文件上右键可以查看word的属性,如下图:


通过在word自定义属性中,我们可以记录一些文档的标识,以便文档再次导入系统时可以做一些校验。在项目中,我们允许文档导出之后再进行编辑,为了防止误操作覆盖了其他人的文档,我们在导出的文档贴上“身份标识”,导入时再验证该文档是否能够正确覆盖某个已存在的文档。

8. 读取自定义图形并在图形中设置文本内容

Word中的自定义图形就是指Word中插入的“形状”内容,如:矩形框、椭圆框等等,使用这些自定义图形的好处是无论输入多长的内容,该内容始终占据指定大小的位置(超长的内容不会显示)。

在该项目中,客户对word的排版比较重视,尤其是word文档的第一页(即封面),都是采用自定义图形来保障封面的布局。在实践中证明,自定义图形的使用能够很好的维持页面的布局,同时,对于图形中的文本文件操作也很方便,很实用。

9. Word转换为Html

Word是一种非结构化数据文件,但是我们可以通过把word转换成html格式文件(包括word中的图片)存储到关系数据库中,当需要在浏览器端展示上传的word内容时,可以直接读取关系数据库中存储的html内容显示在页面上,间接的实现了对word内容的抽取和展示。

该操作的执行过程与打开word后另存为“html”格式的效果是一样的,唯一的区别就是这里是通过命令行的方式来调用转换的。

 

       总的来说,这个项目对word的使用还是很深、很广的,这就要求Word抽取工具具备的功能比较多。在实际的开发过程中,.Net调用的是WordApi接口,通过该API基本可以实现在word中的所有操作。从这里也可以看出,Word的接口调用,还是在.NET环境下使用方便。

你可能感兴趣的:(.net,C#,word,抽取)