欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-20 09:16:06
Word抽取工具        在某项目中,我们需要实现java程序与MS Word的交互,虽然现在有一些开源类库(如:jacob)可以操...
Word抽取工具

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

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

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

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

1.提取word正文

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

抽取word正文的命令为:

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

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

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

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

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

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

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

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

REPLACE=XXXX

CHINESE_NAME=我是中文名

ENGLISH_NAME=yingwenming

PUBLISH_TIME=201X-XX-XX

PERFORM_TIME=201X-XX-XX

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

4. 导入word内容到数据库

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

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

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

 

任务

2013年11月

2013年12月

2014年1月

2014年2月

2014年3月

2014年4月

备注

任务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调用的是Word的Api接口,通过该API基本可以实现在word中的所有操作。从这里也可以看出,Word的接口调用,还是在.NET环境下使用方便。