现在,究竟为什么有人想要将 Word 文档转换成 sdocbook XML 文件呢?因为这对于入门者十分有用, 一旦我们做了这种转换,就可以编写一个程序来抽取这些 sdocbook XML 文件的所有标题,然后自动生成一个带有一些链接的 Web 页面,这些链接可以装入每个单独的 sdocbook XML 文件。听起来很有趣?请继续读下去。
Microsoft Word 以一种专用格式存储其文档。它通过“组件对象模型(COM)”对象(请参阅侧栏 Microsoft COM 对象)显示其某些特性。在这些特性之中, 我们主要来看一下以 Word 的专用格式读取文档的这种特性。该特性能使 MajiX(一种用于 Word 到 XML 转换的开放源码工具)读取 Word 文档。(别忘了,在将文档转换成另一种格式之前, 您要能读取它。)
然而,要从 Java 访问 COM 对象,首先必须使用 Microsoft 的 Java 虚拟机 (JVM) JView。 现在,我们越发不喜欢被单一供应商所束缚,不是吗?您不必再烦恼了。有了 JAva-COM Bridge (JACOB), 这种依赖性已成为过去。JACOB 允许任何 JVM 访问 COM 对象,从而使 Java 应用程序能够利用 COM 对象。 使这一操作成为可能的关键技术就是 Java 本机接口 (JNI) ― 请参阅侧栏 Java 本机接口。
MajiX 是一种利用 JACOB 功能来访问 Microsoft Word COM 对象的 Java 应用程序。这些对象允许 MajiX 读取 Word 文档的格式。 只有这样做,MajiX 才能施展它的魔力(不是有意要表示双关):将 Word 文档转换成 sdocbook XML。
首先, 需要下载和安装 MajiX ― 我使用的版本是 1.2.2(请参阅“参考资料”)。您也可以通过阅读我以前的技巧文章来熟悉 MajiX。
为了读取 Word 文档,MajiX 需要一些 Microsoft Word COM 对象。只有安装了 Word 97 或 Microsoft Office 2000,才有这些 COM 对象。如果您没有安装它们,请先进行安装。
还需要告诉 MajiX 您是否已经安装了 Microsoft Word。
在
<MajiX install path>\bin 目录下,有一个 majix.conf 文件。用您喜欢的文本编辑器打开该文件,
查找
msword。会发现有这样一项:
<entry key="majix.enable.msword" value="1"/> |
确保 value为 1。保存该文件,并退出文本编辑器。
从 JACOB 主页上(请参阅 参考资料),进入 Download部分。要使用 MajiX,无须下载其源代码,所以只要下载二进制文件即可。 有一点非常重要:下载 JACOB 版本 1.6。因为我无法在版本 1.7 下使用 MajiX 1.2.2。如果您正在使用 JACOB 版本 1.7,您将得到下面的错误消息:
com.jacob.com.ComFailException: Can't get object clsid from progid
at com.jacob.com.Dispatch.createInstance(Native Method)
at com.jacob.com.Dispatch.<init>(Dispatch.java)
at com.jacob.activeX.ActiveXComponent.<init>(ActiveXComponent.java)
at ScriptTest.main(ScriptTest.java:14)
|
因此,再次重申,确保您正在使用版本 1.6。
将下载文件解压缩到您指定的目录来安装 JACOB。在此之后,我们将称该目录为
<JACOB install path> 。在
<JACOB install path> 中,有两个重要文件 ― jacob.dll 和 jacob.jar。后者是一组 Java 类,它通过 jacob.dll 来访问 COM 对象的接口。jacob.dll 是 Java 应用程序和 COM 对象之间的桥梁。
要使 Windows 能够找到 jacob.dll,需要将包含 jacob.dll 的目录放入 PATH环境变量。打开一个 DOS 命令窗口,然后键入以下命令:
set PATH = <JACOB install path>;%PATH% |
要使 Java 应用程序能够找到 jacob.jar,需要将 jacob.jar 放入您的 CLASSPATH。在同一个 DOS 命令窗口下,键入以下命令:
set CLASSPATH = <JACOB install path>\jacob.jar;%CLASSPATH% |
在该 DOS 命令窗口中,通过转至
<MajiX install path>\bin 目录和执行
majix 来启动 MajiX。(有关其它启动 MajiX 的方法,请参阅我以前的技巧文章。)
每次运行 MajiX 来转换 Word 文档时,都必须重复这些步骤来设置
PATH和
CLASSPATH。
要想对
PATH和
CLASSPATH 设置一次而对以后的操作都起作用,这取决于您具体的操作系统 ― Windows 98、NT、CE 等 ―
所以您需要参考适当的参考手册。
现在,我们准备将第一个 Word 文档转换成 sdocbook。在 Input RTF File中,键入要转换成 sdocbook 的 Word 文档的完整路径,或单击 Find Document。如果单击 Find Document,那么需要将所有 Files of type更改为 Word files (.doc)。
一旦已经选择了 Input RTF File,将自动用相同的文件路径和名称填充 Output RTF File, 但扩展名将更改为 .xml。
将 Conversion templates更改为 sdocbook。
( 注: 那些从网站上下载了 MajiX 并发现该下拉菜单丢失的用户发送给我许多反馈信息。 如果您是这些用户之一,则请参阅侧栏 “丢失的下拉菜单”。)
单击 Convert,MajiX 将 Word 文档转换成 sdocbook XML 文件。
但是,如果您得到下列错误 ―
Can't find jacob.dll in path
java.lang.UnsatisfiedLinkError: no library jacob (jacob.dll) in java.library.path
at java.lang.Throwable.<init>(Throwable.java:96)
at java.lang.Error.<init>(Error.java:52)
at java.lang.LinkageError.<init>(LinkageError.java:45)
at java.lang.UnsatisfiedLinkError.<init>(UnsatisfiedLinkError.java:44)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java(Compiled Code))
at java.lang.Runtime.loadLibrary0(Runtime.java:473)
at java.lang.System.loadLibrary(System.java:771)
at com.jacob.com.Dispatch.<clinit>(Dispatch.java)
at com.tetrasix.majix.xml.Converter.Convert(Converter.java:62)
at com.tetrasix.majix.uis.ConverterThread.run(ConverterThread.java:62)
|
― 它意味着至 jacob.dll 的路径不正确。请记住, 设置 PATH变量以指向 jacob.dll 所在的路径。
我们刚才已经研究了如何使用 MajiX 将 Word 文档直接转换成 sdocbook XML。 一旦将一组 Word 文档转换成了 sdocbook XML 文件,并将它们存储在一个目录中后, 您就可以容易地编写程序来解析所有这些 sdocbook XML 文件以及查找 <title> 标记和生成 包含至所有这些 sdocbook XML 文件链接的 Web 页面。要将 sdocbook XML 文件实时显示为 HTML,XSLT 处理器(如 Xalan)通过使用 sdocbook 样式表将 sdocbook XML 文件重新格式化成 HTML。这已在我以前的技巧文章中详细描述过了(请参阅 参考资料)。
- 从
Dan Adler 的站点下载 JACOB。
- 请查阅
JACOB FAQ。
-
这里有一篇关于 Java-COM 集成的极好
教程。
- 在
Simple DocBook
上的“结构化信息标准促进组织(OASIS)”页面上查找有关 Simple DocBook 的更多信息
- 从 OASIS 下载
Simple DocBook DTD。
- 在 Apache XML Project 查找
Xalan XSLT 处理器。
- DITA 提供了作为技术文档框架的 DocBook 的替代方法。请阅读它,并从
developerWorks 上的
DITA 简介一文及其相关项下载 DTD。
- IBM
WebSphere Application Server支持 XML 和 Java 开发。
Soon Hin 认为计算机知识类似于巫术。他认为,它们落入别有用心的人手中都会带来破坏。可以通过 khorsh@sg.ibm.com与 Khor Soon Hin 联系。