在某些业务场景下,可能需要将Word文件转换为Pdf文件的需求,Word文件编辑方便,而Pdf文件查看更方便,并且格式基本不会变化,同时可以避免被误编辑。

如果使用的是Java语言,那么可以借助于Jacob开源库实现将Word文件转换为Pdf文件,Jacob是什么呢?先看看官方定义

Jacob 是一个 Java 库,可让 Java 应用程序与 Microsoft Windows DLL 或 COM 库进行通信,它使用 Jacob Java 类通过 JNI 与之通信的自定义 DLL 来实现这一点。

也就是说 Jacob 的实现方式是通过 jacob.dll 调用系统本地安装的 Office 来实现转换,因此使用 Jacob 也有一定的限制:

  • 由于是 dll 库,所以必须是在 Windows 系统环境;
  • 系统需要先安装Office Word应用,比如 MicroSoft Office 或者 WPS Office;

下面通过具体的实践操作和代码来演示。

1、引入Jacob依赖

jacob在github上的官方地址为:https://github.com/freemansoft/jacob-project,目前最新版本为1.20,如下:


如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。


为了方便后期的使用,可以把下载的jar安装到本地的maven库中,具体使用的命令如下:

mvn install:install-file    -Dfile=C:\Users\admin\Downloads\jacob-1.20\jacob.jar  # 配置 jar 包文件所在的位置-DgroupId=com.jacob  # 配置生成 jar 包对应的 groupId-DartifactId=jacob   # 配置生成 jar 包对应的 artifactId-Dpackaging=jar    # 配置文件的打包方式, 此处为 jar-Dversion=1.20    # 配置版本号, 只要符合 Maven 的版本命名规范即可

简写成一行的话,如下:

mvn install:install-file -Dfile=C:\Users\admin\Downloads\jacob-1.20\jacob.jar -DgroupId=com.jacob -DartifactId=jacob -Dpackaging=jar -Dversion=1.20

命令执行成功后,就可以在本地仓库看到类似的文件


至此,以后就可以直接在pom.xml 文件加入以下依赖进行引用

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

2、拷贝 jacob.dll 文件

jacob.dll 文件分为x86和x64的,根据自身系统来进行选择,这里拷贝 jacob-1.20-x64.dll 文件到 jdk/bin 或者 jdk/jre/bin 目录下都可以,这里选择将其拷贝至 jdk/jre/bin 目录中,如下:


官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md

3、代码实现

package com.magic.jacob;import java.io.File;
import java.nio.file.Files;
import java.util.Objects;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;/*** Word转PDF工具类*/
public class WordToPdfUtils {/** word 转换为 pdf 的格式宏,值为 17 */private static final int WORD_FORMAT_PDF = 17;private static final String MS_OFFICE_APPLICATION = "Word.Application";private static final String WPS_OFFICE_APPLICATION = "KWPS.Application";/*** 微软Office Word转PDF* 如果无法转换,可能需要下载 SaveAsPDFandXPS.exe 插件并安装* @param wordFile Word文件* @param pdfFile Pdf文件*/public static void msOfficeToPdf(String wordFile, String pdfFile) {wordToPdf(wordFile, pdfFile, MS_OFFICE_APPLICATION);}/*** WPS Office Word转PDF* @param wordFile Word文件* @param pdfFile Pdf文件*/public static void wpsOfficeToPdf(String wordFile, String pdfFile) {wordToPdf(wordFile, pdfFile, WPS_OFFICE_APPLICATION);}/*** Word 转 PDF* @param wordFile Word文件* @param pdfFile Pdf文件* @param application Office 应用*/private static void wordToPdf(String wordFile, String pdfFile, String application) {Objects.requireNonNull(wordFile);Objects.requireNonNull(pdfFile);Objects.requireNonNull(application);ActiveXComponent app = null;Dispatch document = null;try {File outFile = new File(pdfFile);// 如果目标路径不存在, 则新建该路径,否则会报错if (!outFile.getParentFile().exists()) {Files.createDirectories(outFile.getParentFile().toPath());}// 如果目标文件存在,则先删除if (outFile.exists()) {outFile.delete();}// 这里需要根据当前环境安装的是 MicroSoft Office还是WPS来选择// 如果安装的是WPS,则需要使用 KWPS.Application// 如果安装的是微软的 Office,需要使用 Word.Applicationapp = new ActiveXComponent(application);app.setProperty("Visible", new Variant(false));app.setProperty("AutomationSecurity", new Variant(3));Dispatch documents = app.getProperty("Documents").toDispatch();document = Dispatch.call(documents, "Open", wordFile, false, true).toDispatch();Dispatch.call(document, "ExportAsFixedFormat", pdfFile, WORD_FORMAT_PDF);} catch (Exception e) {e.printStackTrace();} finally {if (document != null) {Dispatch.call(document, "Close", false);}if (app != null) {app.invoke("Quit", 0);}ComThread.Release();}}
}

如果找不到 dll 文件,则会报错,具体错误信息如下:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob-1.20-x64 in java.library.pathat java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)at java.lang.Runtime.loadLibrary0(Runtime.java:870)at java.lang.System.loadLibrary(System.java:1122)at com.jacob.com.LibraryLoader.loadJacobLibrary(LibraryLoader.java:184)at com.jacob.com.JacobObject.<clinit>(JacobObject.java:110)at com.magic.springlearning.jacob.WordToPdfUtils.officeToPdf(WordToPdfUtils.java:31)at com.magic.springlearning.jacob.WordToPdfUtils.main(WordToPdfUtils.java:17)

4、测试验证

public static void main(String[] args) {wpsOfficeToPdf("D:\\Test\\test_word.docx", "D:\\Test\\test_word.pdf");
}

由于本地安装的是WPS Office,所以选择 wpsOfficeToPdf() 方法,经过测试,如果选择 msOfficeToPdf() 方法也是可以的,只是转换后的文件大小相差了一倍,转换后的文件效果如下:

使用Jacob实现将Word文件转换为Pdf文件相关推荐

  1. python批量pdf转word,python批量实现Word文件转换为PDF文件

    本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下 1.目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2.遍历目录 作者总 ...

  2. python批量操作word文档实战_python批量实现Word文件转换为PDF文件

    本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下 1.目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2.遍历目录 作者总 ...

  3. LabWindows/CVI系列——CVI下Word文件转换为PDF文件

    CVI下Word文件转换为PDF文件 目录: 需求场景 环境说明 所需文件 步骤 需求场景: 在某型号机电集成测试系统中,需要将试验报表(Word格式)转换为PDF文档,以便不易修改和查看. 环境说明 ...

  4. 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)

    将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...

  5. 如何将CAJ文件转换为PDF文件

    转载自:如何将CAJ文件转换为PDF文件 如何将CAJ文件转换为PDF文件 1.使用官方的CAJViewer将CAJ文件打印PDF: 2.在线网站转换 3.直接从知网下载(推荐) ps:书签添加方法 ...

  6. office文件转换为pdf文件

    office文件转换为pdf文件 首先安装openoffice,自行百度 导入jar包,自行百度 引入坐标: <!-- 转pdf配置 --><dependency><gr ...

  7. 把超星阅览器的文件转换为PDF文件

    如果你是超星的用户的话,这篇文章对你也许有用:     大家都知道,从超星上面下载的书籍只能相应的用户使用,其他用户打开该书籍时还需要用户名和密码,这让很多用户有点不便.其实,可以把超星的内容转换为p ...

  8. 使用java程序将ceb文件转换为pdf文件

    要使用 Java 程序将 CEB 文件转换为 PDF 文件,你可以使用 Apache POI 库来读取 CEB 文件并解析其内容. Apache POI 是一个开源的 Java 库,可以用于读取和写入 ...

  9. Java使用OpenOffice实现文件转换为PDF文件(三)

    项目背景:开发中需要实现word.ppt文件的在线预览,而浏览器无法打开此类文件,于是需要上传文件的时候转PDF文件存储. 下面是具体操作步骤: 一.OpenOffice是跨平台的免费软件套件,下载地 ...

最新文章

  1. 【Qt】使用QCamera获取摄像头,并使用图像视图框架QGraphics*来显示
  2. C# 视频多人脸识别的实现
  3. Numpy-矩阵的合并
  4. matlab to r,matlab to R import structure
  5. 动作基类 CCAction
  6. linux 磁盘管理3板斧,Linux磁盘管理三板斧的使用心得
  7. [Redux/Mobx] Redux中异步action和同步action最大的区别是什么?
  8. 【后端开发】分析抖音后台架构
  9. Java基于JavaMail实现向QQ邮箱发送邮件遇到的问题
  10. 如何使用go打出hell word
  11. php是什么电器元件,电阻器是电子、电器设备中常使用的一种基本电子元件
  12. 深度学习三巨头共获 2018 年图灵奖(经典重温)!
  13. eps php,eps是什么文件
  14. 林子雨_大数据技术原理与应用课后习题
  15. ubuntu nvidia 驱动卸载
  16. 更改计算机时间格式,修改电脑日期时间显示格式
  17. 计算机开启蓝牙网络,怎么打开电脑蓝牙功能(笔记本电脑蓝牙怎么开)
  18. 初识机器学习前导内容_你需要知道的基本概念罗列_以PY为工具 【Python机器学习系列(一)】
  19. 未能加载文件或程序集“Newtonsoft.Json解决方法
  20. ListView中如何优化图片

热门文章

  1. Kotlin入门笔记(二) Kotlin 函数的简单介绍
  2. mysql 四叉树的应用_树(简单应用-四叉树).ppt
  3. ipfs浏览器java实现_Brave浏览器中的IPFS
  4. 油库可视化指挥调度解决方案
  5. 博达的各种插件的下载
  6. 网桥信号测试软件,史上最全的无线网桥应用知识
  7. android通过ip查询地址吗,Android 根据IP地址获取城市
  8. Python实现语音识别(基于百度语音识别)
  9. 10款屏幕取色器介绍
  10. 二级python考试安装python3.5.3时遇到的一些问题及解决方法