Jacob处理Word文档的方法
2008-06-22 17:56
183 查看
7.4 使用Jacob来处理Word文档
Word或Excel程序是以一种COM组件形式存在的。如果能够在Java中调用Word的COM组件,就能使用它的方法来获取Word文档中的文本信息。目前网上有许多提供这样的工具。
7.4.1 Jacob的下载
Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为: http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368。本书采用的是jacob_1.11_zip。解压下载的Jacob_1.11_zip文件后,如图7-17所示。
![](http://www.zxbc.cn/uploads/allimg/080501/1834250.jpg)
[align=center]图7-17 Jacob包解压后的内容[/align]
7.4.2 在Eclipse中配置
(1)将jacob.jar导入工程的Build Path,然后确认自己机器的CPU类型(X86或AMD64),并选择不同目录下的jacob.dll文件。
(2)将jacob.dll放到%JAVA_HOME%/jre/bin目录下,其中,%JAVA_HOME%就是JDK的安装目录。注意这个的jre目录必须是Eclipse当前正在使用的目录,在Eclipse中选择“window->Preferences”菜单,在弹出的对话框中选择“Java->Installed JREs”项,如图7-18所示。
![](http://www.zxbc.cn/uploads/allimg/080501/1834251.jpg)
图7-18 Eclipse中JRE设置的对话框
(3)当前选择的JRE是“C:/Program Files/Java/jdk1.5.0_07/jre”目录下的,所以需要把jacob.dll复制到“C:/Program Files/Java/jdk1.5.0_07/jre/bin”目录下面。
(4)在工程中新建一个ch7.jacob包,并在包中创建WordReader类。该类将提供一个静态的extractDoc()方法。它接收两个参数,一个是要处理的DOC文件名,另一个则是输出的文件名,然后通过JNI调用Word的API转换内容,该函数的代码如下。
代码7.10
public static void extractDoc(String inputFIle, String outputFile) {
boolean flag = false;
// 打开Word应用程序
ActiveXComponent app = new ActiveXComponent("Word.Application");
try {
// 设置word不可见
app.setProperty("Visible", new Variant(false));
// 打开word文件
Dispatch doc1 = app.getProperty("Documents").toDispatch();
Dispatch doc2 = Dispatch.invoke(
doc1,
"Open",
Dispatch.Method,
new Object[] { inputFIle, new Variant(false),
new Variant(true) }, new int[1]).toDispatch();
// 作为txt格式保存到临时文件
Dispatch.invoke(doc2, "SaveAs", Dispatch.Method, new Object[] {
outputFile, new Variant(7) }, new int[1]);
// 关闭word
Variant f = new Variant(false);
Dispatch.call(doc2, "Close", f);
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[] {});
}
if (flag == true) {
System.out.println("Transformed Successfully");
} else {
System.out.println("Transform Failed");
}
}
(5)创建一个main函数来测试WordReader类,该main函数代码如下。
public static void main(String[] args) {
WordReader.extractDoc("c:/test.doc","c:/jacob.txt");
}
(6)新生成的txt文件被保存到c:/jacob.txt下,如图7-19所示。
![](http://www.zxbc.cn/uploads/allimg/080501/1834252.jpg)
[align=center]图7-19 使用Jacob处理的效果[/align]
在使用Jacob时,很重要的一点是,用户本地系统中必须安装有Word的应用程序。否则也就无法建立Java-COM桥,进而无法解析了。
Word或Excel程序是以一种COM组件形式存在的。如果能够在Java中调用Word的COM组件,就能使用它的方法来获取Word文档中的文本信息。目前网上有许多提供这样的工具。
7.4.1 Jacob的下载
Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为: http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368。本书采用的是jacob_1.11_zip。解压下载的Jacob_1.11_zip文件后,如图7-17所示。
![](http://www.zxbc.cn/uploads/allimg/080501/1834250.jpg)
[align=center]图7-17 Jacob包解压后的内容[/align]
7.4.2 在Eclipse中配置
(1)将jacob.jar导入工程的Build Path,然后确认自己机器的CPU类型(X86或AMD64),并选择不同目录下的jacob.dll文件。
(2)将jacob.dll放到%JAVA_HOME%/jre/bin目录下,其中,%JAVA_HOME%就是JDK的安装目录。注意这个的jre目录必须是Eclipse当前正在使用的目录,在Eclipse中选择“window->Preferences”菜单,在弹出的对话框中选择“Java->Installed JREs”项,如图7-18所示。
![](http://www.zxbc.cn/uploads/allimg/080501/1834251.jpg)
图7-18 Eclipse中JRE设置的对话框
(3)当前选择的JRE是“C:/Program Files/Java/jdk1.5.0_07/jre”目录下的,所以需要把jacob.dll复制到“C:/Program Files/Java/jdk1.5.0_07/jre/bin”目录下面。
(4)在工程中新建一个ch7.jacob包,并在包中创建WordReader类。该类将提供一个静态的extractDoc()方法。它接收两个参数,一个是要处理的DOC文件名,另一个则是输出的文件名,然后通过JNI调用Word的API转换内容,该函数的代码如下。
代码7.10
public static void extractDoc(String inputFIle, String outputFile) {
boolean flag = false;
// 打开Word应用程序
ActiveXComponent app = new ActiveXComponent("Word.Application");
try {
// 设置word不可见
app.setProperty("Visible", new Variant(false));
// 打开word文件
Dispatch doc1 = app.getProperty("Documents").toDispatch();
Dispatch doc2 = Dispatch.invoke(
doc1,
"Open",
Dispatch.Method,
new Object[] { inputFIle, new Variant(false),
new Variant(true) }, new int[1]).toDispatch();
// 作为txt格式保存到临时文件
Dispatch.invoke(doc2, "SaveAs", Dispatch.Method, new Object[] {
outputFile, new Variant(7) }, new int[1]);
// 关闭word
Variant f = new Variant(false);
Dispatch.call(doc2, "Close", f);
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
app.invoke("Quit", new Variant[] {});
}
if (flag == true) {
System.out.println("Transformed Successfully");
} else {
System.out.println("Transform Failed");
}
}
(5)创建一个main函数来测试WordReader类,该main函数代码如下。
public static void main(String[] args) {
WordReader.extractDoc("c:/test.doc","c:/jacob.txt");
}
(6)新生成的txt文件被保存到c:/jacob.txt下,如图7-19所示。
![](http://www.zxbc.cn/uploads/allimg/080501/1834252.jpg)
[align=center]图7-19 使用Jacob处理的效果[/align]
在使用Jacob时,很重要的一点是,用户本地系统中必须安装有Word的应用程序。否则也就无法建立Java-COM桥,进而无法解析了。
相关文章推荐
- jacob处理word文档
- Java处理word文档 用jacob 表格图片文字替换
- 使用Jacob来处理Word文档
- 使用Jacob来处理Word文档
- Jacob 导出word文档 资源无法正常释放 解决方法 .
- word文档错误“您正在处理的信息有可能丢失”解决方法
- [导入].Net 中处理Word(2007)文档的一种方法
- Jacob 导出word文档 资源无法正常释放 解决方法
- Jacob处理Word文档总结以及Java操作Office2007
- 7.4 使用Jacob来处理Word文档
- (转)Jacob 导出word文档 资源无法正常释放 解决方法
- word文档错误“您正在处理的信息有可能丢失”解决方法
- .Net 中处理Word(2007)文档的一种方法
- 终于把Jacob处理Word文档搞定了
- Mysql官方文档中争对安全添加列的处理方法。Mysql Add a Column to a table if not exists
- Word文档常见的三大问题及其解决方法(珍藏版)
- C# 如何处理Word文档分页——插入、删除、阻止分页
- asp.net实现word文档在线预览功能的方法
- Java处理OA中常用的word文档,PDf,excel等问题---1
- 不启动Word查看文档字数统计的方法