java - Jacob - Word 文件可以在 32 位中正确打开,但不能在 64 位中正确打开

标签 java jsp 32bit-64bit jacob

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

我不明白我错过了什么。

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

最佳答案

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

  1. 违反安全规定
  2. 不满意的链接错误
  3. 服务器上未安装 Word
  4. 其他一些类加载器错误(编辑)

我尝试使用一个简单的 jsp,并直接在 try-catch block 中调用 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,直到重新加载服务器应用程序为止。

关于java - Jacob - Word 文件可以在 32 位中正确打开,但不能在 64 位中正确打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10138630/

相关文章:

c# - 将控制台应用程序编译为 32 位

linux - 安装多个版本的 gcc 时,libtool 与 64 位目标平台上的 32 位版本的 libstdc++.so 链接

java - 从其他模式调用存储过程来创建表

java - jtable 引用数字的着色单元格

java - opengl仅从java中的许多列表中绘制最终的四边形

java - JSP登录2页

java -/urlpage 和 urlpage 有什么区别?

java - 如何将数据从一个jsp页面发送到另一个jsp页面

vbscript - 从批处理文件运行vbscript

java - 当我将某些类变量重新分配给新对象时会发生什么?