雅各布 - Word文件正确打开32位而不是64位

时间:2012-04-13 09:46:39

标签: java jsp 32bit-64bit jacob

我有一个java web应用程序,它使用jacob库(在32位和64位运行)来创建/打开word文件。它正确地在我的机器上运行(32位),这意味着启动word应用程序并打开word文件。 当Java项目加载到服务器计算机(64位)上时会出现问题:将启动word应用程序(我在任务管理器窗口中看到“WINWORD.EXE * 32”),但文件未打开。

我不明白我错过了什么。

你可以帮帮我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:2)

我强烈怀疑以下事情之一正在发生:

  1. 安全违规
  2. 不满意的链接错误
  3. 服务器上未安装Word
  4. 其他一些类加载器错误(编辑
  5. 我尝试使用一个简单的jsp,并在try-catch块中直接调用了LibraryLoader:

     try {
       LibraryLoader.loadJacobLibrary();
       ActiveXComponent oWord = new ActiveXComponent("Word.Application");
       oWord.setProperty("Visible", new Variant(true));
     } catch (Throwable th) {
       th.printStackTrace(new java.io.PrintWriter(out));
     }
    

    并且无法初始化JacobObject类 - 由于静态调试初始化程序的安全性违规而导致:"true".equalsIgnoreCase(System.getProperty("com.jacob.debug"));。一旦我用简单的赋值替换为true,并将其替换为jacob.jar,我最终得到了:java.lang.UnsatisfiedLinkError: no jacob-1.16-x64 in java.library.path

    在这一点上,事情变得多毛了。您可能必须将替换方法loadJacobLibrary的LibraryLoader代码替换为:

    public static void loadJacobLibrary() {
      System.load("C:/<path to .dll as known on the server>/" + getPreferredDLLName() + ".dll");
    }
    

    然后调用了Word.Application

    编辑对于其他一些类加载器错误,基本问题是您只能加载.dll within the server的一个实例 - 这是指使用tomcat,但问题与所有其他servlet容器类似 - 你只需要加载.dll一次,并且为了确保代码在所有servlet中都可用,它需要加载到一个没有的类加载器中通过重新加载Web应用程序而受到干扰。如果发生这种情况,那么在重新加载服务器应用程序之前,您将无法使用.dll。