Skip to content
标签
文档
报表
字数
658 字
阅读时间
3 分钟

一、概述

jacob(java com bridge,java com桥)分为两个部分,jacob.jar,jacob.dll,使用时两个东西的版本要一致,而且还分32位和64位,它的位数和jdk的位数有关,与操作系统的位数无关。它的原理是通过java的jni功能,调用系统组件dll,通过这个com桥来操作com组件(windows的一种软件编程技术)

如果可以在 Java 中调用 COM 组件,就可以充分利用 Java 技能和现有的成熟 COM 工具包,大大简化应用开发的过程。 COM 组件提供了一种与其他语言的互操作方式,叫做自动化(Automation)。 现有的 Java COM 互操作的解决方案有很多种,由于设计目的的不同,在性能、易用性等方面都有很大的区别。本文介绍的 JACOB 开源项目,致力于简化 Java 操作 COM 组件,提供了一个虚拟机独立的自动化服务器实现,由于其通用性设计,您可以非常简单地完成对现有应用的集成。

二、使用

使用需要从官网下载最新的包,得到dll文件和jar包。

dll文件需要放置到jdk的bin目录下(根据系统的位数选择不同的dll)

jar包可以通过以下命令,将jar包导入本地仓库。

cmd
mvn install:install-file -DgroupId=com.jacob -DartifactId=jacob -Dversion=1.20 -Dfile=jacob.jar  -Dpackaging=jar

项目就能通过mvn添加引用

xml
<dependency>
    <groupId>com.jacob</groupId>
    <artifactId>jacob</artifactId>
    <version>1.20</version>
</dependency>

三、office调用

3.1 word转pdf

把Word转成PDF目前最简单的方式就是调用office的方法,本质上就是打开Word后另存为成pdf。使用jacob方式。

最基本的环境:1、本机上安装了2007以上的office软件 2、jdk1.6以上的版本

代码实现:

java
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;

public class ExportPdfDemo {
    public static void main(String[] args) {
        String source = "E:\\员工(姓名)合同.docx";
        String target = "E:\\员工(姓名)合同.pdf";
        System.out.println("Word转PDF开始启动...");
        ActiveXComponent app = null;
        try {
            //            调用window中的程序
            app = new ActiveXComponent("Word.Application");
            //            调用的时候不显示窗口
            app.setProperty("Visible", false);
            // 获得所有打开的文档
            Dispatch docs = app.getProperty("Documents").toDispatch();
            Dispatch doc = Dispatch.call(docs, "Open", source).toDispatch();
            System.out.println("转换文档到PDF:" + target);
            // 另存为,将文档保存为pdf,其中Word保存为pdf的格式宏的值是17
            Dispatch.call(doc, "SaveAs", target, 17);
            Dispatch.call(doc, "Close");
        } catch (Exception e) {
            System.out.println("Word转PDF出错:" + e.getMessage());
        } finally {
            // 关闭office
            if (app != null) {
                app.invoke("Quit", 0);
            }
        }
    }
}