随笔-208  评论-469  文章-30  trackbacks-0

首先我已经做了如下配置:
1.导入 jacob.jar 这个包。
2.把 jacob.dll 拷贝到 C:\WINDOWS\system32 目录下。
以上的两个文件您可以到网上http://danadler.com/jacob/ 下载的1.7的版本
jacob.jar 与 jacob.dll 版本一致。

代码如下:
package one;

import com.jacob.com.*;
import com.jacob.activeX.*;
import java.io.*;
//取得指定目录下面所有的doc文件名称
public class wordtohtml2 {
 // ------------------------------------------------------------------------------
 // 方法原型: change(String paths)
 // 功能描述: 将指定目录下面所有的doc文件转化为HTML(html文件夹必须存在)并存储在相同目录下
 // 输入参数: String
 // 输出参数: 无
 // 返 回 值: 无
 // 其它说明: 递归
 // ------------------------------------------------------------------------------
 public static void change(String paths, String savepaths) {
  File d = new File(paths);
  // 取得当前文件夹下所有文件和目录的列表
  File lists[] = d.listFiles();
  String pathss = new String("");
  // 对当前目录下面所有文件进行检索
  for (int i = 0; i < lists.length; i++) {
   if (lists[i].isFile()) {
    String filename = lists[i].getName();
    String filetype = new String("");
    // 取得文件类型
    filetype = filename.substring((filename.length() - 3), filename.length());
    // 判断是否为doc文件
    if (filetype.equals("doc")) {
     System.out.println("当前正在转换......");
     // 打印当前目录路径
     System.out.println(paths);
     // 打印doc文件名
     System.out.println(filename.substring(0, (filename.length() - 4)));
     ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
     String docpath = paths + filename;
     String htmlpath = savepaths + filename.substring(0, (filename.length() - 4));
     String inFile = docpath;
     // 要转换的word文件
     String tpFile = htmlpath;
     // HTML文件
     boolean flag = false;
     try {
      app.setProperty("Visible", new Variant(false));
      // 设置word不可见
      Dispatch docs = app.getProperty("Documents").toDispatch();
      Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[] {inFile, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
      // 打开word文件
      Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { tpFile, new Variant(8) }, new int[1]);
      // 作为html格式保存到临时文件
      Variant f = new Variant(false);
      Dispatch.call(doc, "Close", f);
      flag = true;
     } catch (Exception e) {
      e.printStackTrace();
     } finally {
      app.invoke("Quit", new Variant[] {});
     }
     System.out.println("转化完毕!");
    }
   } else {
    pathss = paths;
    // 进入下一级目录
    pathss = pathss + lists[i].getName() + "\\";
    // 递归遍历所有目录
    change(pathss, savepaths);
   }
  }
 }
 public static void main(String[] args) {
  String paths = new String("e:\\english\\ebook\\");
  String savepaths = new String("e:\\english\\ebook\\");
  change(paths, savepaths);
 }
}
运行后出现的错误为:
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Documents
Description: An unknown COM error has occured.
 at com.jacob.com.Dispatch.invokev(Native Method)
 at com.jacob.activeX.ActiveXComponent.getProperty(ActiveXComponent.java)
 at one.WordtoHtml.change(WordtoHtml.java:25)
 at one.WordtoHtml.main(WordtoHtml.java:39)
Exception in thread "main" com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Quit
Description: An unknown COM error has occured.
 at com.jacob.com.Dispatch.invokev(Native Method)
 at com.jacob.activeX.ActiveXComponent.invoke(ActiveXComponent.java)
 at one.WordtoHtml.change(WordtoHtml.java:35)
 at one.WordtoHtml.main(WordtoHtml.java:39)


附加:下面是总结了的错误!
1、如果出现下面的错误
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: Version
Description: An unknown COM error has occured.
表示dll的版本不对,换成最新版本即可。
2、如果出现下面的错误
no jacob in java.library.path
java.lang.UnsatisfiedLinkError: no jacob in java.library.path
表示把dll放到path下即可,设置path或是放到window/system32下

posted on 2008-03-29 02:16 EricWong 阅读(4777) 评论(6)  编辑  收藏 所属分类: Java

评论:
# re: jacob问题-大家帮我看看,先谢过! 2008-03-29 09:56 | like
最近也遇到这个问题  回复  更多评论
  
# re: jacob问题-大家帮我看看,先谢过![未登录] 2008-05-07 13:51 | Michael
我今天也遇到了这个问题,正在郁闷
At Invoke of: Documents  回复  更多评论
  
# re: jacob问题-大家帮我看看,先谢过! 2008-07-17 12:30 | lili
谢谢,借鉴一下!  回复  更多评论
  
# re: jacob问题-大家帮我看看,先谢过! 2008-10-18 10:54 | yu
我下的就是1.7,可是还报那个错误
"A COM exception has been encountered"

why???
困惑中ing...  回复  更多评论
  
# re: jacob问题-大家帮我看看,先谢过![未登录] 2009-02-04 08:51 | ice
"A COM exception has been encountered"

能否给个最新的jacob.dll
bingniao@163.com 多谢~!  回复  更多评论
  
# re: jacob问题-大家帮我看看,先谢过! 2009-06-17 13:29 | jhx
遇到了第一种错误,能否给个最新的jacob.dll   回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: