将 Word 文档转换成 Simple Docbook XML
 
- UID
- 1066743
|

将 Word 文档转换成 Simple Docbook XML
现在,究竟为什么有人想要将 Word 文档转换成 sdocbook XML 文件呢?因为这对于入门者十分有用,一旦我们做了这种转换,就可以编写一个程序来抽取这些 sdocbook XML 文件的所有标题,然后自动生成一个带有一些链接的 Web 页面,这些链接可以装入每个单独的 sdocbook XML 文件。听起来很有趣?请继续读下去。
内幕Microsoft Word 以一种专用格式存储其文档。它通过“组件对象模型(COM)”对象(请参阅侧栏 )显示其某些特性。在这些特性之中,我们主要来看一下以 Word 的专用格式读取文档的这种特性。该特性能使 MajiX(一种用于 Word 到 XML 转换的开放源码工具)读取 Word 文档。(别忘了,在将文档转换成另一种格式之前,您要能读取它。)
Microsoft COM 对象最初, Microsoft COM 被称为“对象链接与嵌入(Object Linking and Embedding (OLE))”。它构成所有 ActiveX 技术的基础。它是一种开发组件对象的规范,这些组件对象可以使用 Windows 操作系统的专有特性进行互操作。您将在 中找到有关 Java-COM 集成的优秀文章。
然而,要从 Java 访问 COM 对象,首先必须使用 Microsoft 的 Java 虚拟机 (JVM) JView。现在,我们越发不喜欢被单一供应商所束缚,不是吗?您不必再烦恼了。有了 JAva-COM Bridge (JACOB),这种依赖性已成为过去。JACOB 允许任何 JVM 访问 COM 对象,从而使 Java 应用程序能够利用 COM 对象。使这一操作成为可能的关键技术就是 Java 本机接口 (JNI) ― 请参阅侧栏 。
MajiX 是一种利用 JACOB 功能来访问 Microsoft Word COM 对象的 Java 应用程序。这些对象允许 MajiX 读取 Word 文档的格式。只有这样做,MajiX 才能施展它的魔力(不是有意要表示双关):将 Word 文档转换成 sdocbook XML。
加速 首先,需要下载和安装 MajiX ― 我使用的版本是 1.2.2(请参阅“参考资料”)。您也可以通过阅读我以前的技巧文章来熟悉 MajiX。
Java 本机接口Java 本机接口 (JNI) 是一种使 Java 程序能够调用以 非 Java 语言编写的库的接口。在这种特殊情况下,JACOB 利用 JNI 来调用以非 Java 语言编写的 COM 对象。
非常重要的先决条件为了读取 Word 文档,MajiX 需要一些 Microsoft Word COM 对象。只有安装了 Word 97 或 Microsoft Office 2000,才有这些 COM 对象。如果您没有安装它们,请先进行安装。
还需要告诉 MajiX 您是否已经安装了 Microsoft Word。在 <MajiX install path>\bin 目录下,有一个 majix.conf 文件。用您喜欢的文本编辑器打开该文件,查找 msword。会发现有这样一项:
1
| <entry key="majix.enable.msword" value="1"/>
|
确保 value为 1。保存该文件,并退出文本编辑器。
从 JACOB 主页上(请参阅 ),进入 Download部分。要使用 MajiX,无须下载其源代码,所以只要下载二进制文件即可。 有一点非常重要:下载 JACOB 版本 1.6。因为我无法在版本 1.7 下使用 MajiX 1.2.2。如果您正在使用 JACOB 版本 1.7,您将得到下面的错误消息:
1
2
3
4
5
| 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 命令窗口,然后键入以下命令:
1
| set PATH = <JACOB install path>;%PATH%
|
要使 Java 应用程序能够找到 jacob.jar,需要将 jacob.jar 放入您的 CLASSPATH。在同一个 DOS 命令窗口下,键入以下命令:
1
| 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 等 ―所以您需要参考适当的参考手册。
丢失的下拉菜单当您下载了 MajiX 并发现下拉菜单丢失时,下面是应该采取的一些步骤:
- 在 <install path>/majix/bin 下,列出 *.tdef 文件的目录。您至少应该有 sdocbook.tdef 、 docbook.tdef 和 default.tdef 这些文件。
- 单击 Tools。
- 双击 Edit the configuration file。
- 双击 Templates。
- 单击 New。
- 选择您在步骤 1 中找到的 sdocbook.tdef 。
- 单击 Validate。
- 单击 Close。
- 再次单击 Close。
- 在主面板上,单击 Quit。
- 重新启动 MajiX。
准备、设置、转换…现在,我们准备将第一个 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 文件。
但是,如果您得到下列错误 ―
1
2
3
4
5
6
7
8
9
10
11
12
| 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。这已在我以前的技巧文章中详细描述过了(请参阅 )。 |
|
|
|
|
|