.Net开发的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环境下使用方便。