首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

将 Word 文档转换成 Simple Docbook XML

将 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。这已在我以前的技巧文章中详细描述过了(请参阅 )。
返回列表