软件的互操作性是一个我们经常面临的问题,如果 Java 可以自由的调用其他语言和平台的成熟代码,可以充分利用您的 Java 技能,大大提高您的生产力。现有的 Java COM 互操作技术有很多种实现,JACOB 开源项目提供了一个简单方便的通用调用框架。
JACOB 开源项目提供的是一个 JVM 独立的自动化服务器实现,其核心是基于 JNI 技术实现的 Variant, Dispatch 等接口,设计参考了 Microsoft VJ++ 内置的通用自动化服务器,但是 Microsoft 的实现仅仅支持自身的 JVM。通过 JACOB,可以方便地在 Java 语言中进行晚期绑定方式的调用。
下面用jacob实现word到html的转化。
1·配置开发和运行环境。
首先,使用 JACOB 来“搭桥”,需要下载最新的 JACOB 相关类库,包括 Jacob.jar 和 Jacob.dll。
(1)将 jar 文件添加到您的 Eclipse 工程的构建路径。

package test;
import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class WordToHtml {
public boolean changeFormat (String FileName){
String FileFormat = FileName.substring(FileName.length()-4,FileName.length());
System.out.println("文件后缀"+FileFormat);
if(FileFormat.equalsIgnoreCase(".doc")){
String DocFile = FileName;
System.out.println("word文件路径:"+DocFile);
//word文件的完整路径
String HtmlFile = DocFile.substring(0, (DocFile.length() - 4)) + ".htm";
System.out.println("htm文件路径:"+HtmlFile);
//html文件的完整路径
ActiveXComponent app = new ActiveXComponent("Word.Application");
//启动word
try
{
app.setProperty("Visible", new Variant(false));
//设置word程序非可视化运行
Dispatch docs = (Dispatch) app.getProperty("Documents").toDispatch();
Dispatch doc = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{DocFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch();
//打开word文件
Dispatch.invoke(doc,"SaveAs",Dispatch.Method, new Object[]{HtmlFile,new Variant(8)}, new int[1]);
//作为htm格式保存文件
Dispatch.call(doc, "Close",new Variant(false));
//关闭文件
}
catch (Exception e){
e.printStackTrace();
}
finally {
app.invoke("Quit", new Variant[] {});
//退出word程序
}
//转化完毕
return true;
}
else{
return false;
}
}
public static void main(String[] args ) {
WordToHtml d = new WordToHtml();
File f=new File("c:\\a.doc");
System.out.println(f.getAbsolutePath());
System.out.println(d.changeFormat( f.getAbsolutePath()));
}