文章目录
1. jacob介绍
jacob是Java与COM组件桥接的缩写,即JAVA-COM Bridge。通过使用Jacob类库,我们可以很方便地在Java程序中调用COM自动化组件。
Jacob最初是由美国人Dan Alder在Inventure公司担任CTO时编写的,目的是为了方便众多的程序员在Java2虚拟机上,调用Win32平台上COM自动化服务器中的组件。当Jacob项目以开源的方式在网络上公布以后,越来越多的人开始参与项目的研发与改进中去。
Jacob类库中只有两个包:com.jacob.activex和com.jacob.com。
1. com.jacob.activex包建立在com.jacob.com基础之上,主要包含了ActiveXComponent类。
2. com.jacob.com中有一个非常基础的类JacobObject,该包中比较常用的两个类Dispatch和Variant便是继承自JacobObject。
2. 使用场景
把Word转成PDF目前最简单的方式就是调用office的方法,本质上就是打开Word后另存为成pdf,通过什么方式来调用呢?
使用 jacob,速度上还是可以的,Word中的原样式也不会丢失。
3. 环境准备
最基本的环境:1、本机上安装了2007以上的office软件 2、jdk1.6以上的版本
3.1 百度云下载
在这里我也准备了一个 jacbo1.9 请在百度云自行下载
百度云:https://pan.baidu.com/s/19aRzrTUhiuBHO4r9PkZbmA
提取码:szy1
3.2 把下载的jar放入到本地仓库
这个jar从中央仓库中没有找到,需要我们自己打到本地仓库中。
进入到jar所在的目录执行以下命令:
注意: 不要在中文目录下操作
mvn install:install-file -DgroupId=com.jacob -DartifactId=jacob -Dversion=1.19 -Dfile=jacob.jar -Dpackaging=jar
3.3 把下面dll放入到java的jre/bin目录中
把dll文件放入到 jre\bin 目录下 64位的放x64文件,32位的放x86文件
如果不太确定是32位还是64位的就把两个dll都放进去
3.4 在项目中加入依赖
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.9</version>
</dependency>
4. Jacob调用MS Office COM自动化组件转换Office文档为PDF
5. 代码展示
把我D盘下的Word转成PDF
@Test
void contextLoads() {
//输入文件地址
String source = "d://合同.docx";
//输出文件地址
String target = "d://合同.pdf";
//调用window中的office程序
ActiveXComponent app =null;
try {
//调用window中的office程序
app = new ActiveXComponent("Word.Application");
//调用word时,不显示窗口
app.setProperty("Visible",false);
//获取文档
Dispatch docs = app.getProperty("Documents").toDispatch();
//打开指定的文档
Dispatch doc = Dispatch.call(docs, "Open",source).toDispatch();
//调用另存为功能 宏值
Dispatch.call(doc,"SaveAs",target,17);
//关闭office
Dispatch.call(doc,"Close");
} catch (Exception exception) {
exception.printStackTrace();
}finally {
//退出Office
app.invoke("Quit");
}
}