笨方法学 Java -33-综合练习4-关于 Word 文档转 PDF 文档
作者:谎言诞行    发布时间:2024年03月26日

一、前言

在日常的工作中,我们常常会遇到一种文档处理需求:文档预览。比如,我们通过在线编辑器编写了一个 word 文档,我们想看看 word 文档的生成效果是否正常。但是,word 文档在网页浏览器是无法直接查看的,这时候,我们可以把 word 文档转为 pdf 文档。pdf 文档可以直接在浏览器打开查看。

因此,我们本章节就讨论下word文档转pdf文档的处理。


二、关于pdf文档转换器

在 pdf 转换上,有不少转换器。但大多是要收费的。如果,要找一款免费,而且 Java 能用的,目前比较好的选择就是 documents4j 这个生成器了。它不单单能处理 Office 文档,还能处理 html 之类的。

documents4j 的github主页地址为:https://github.com/documents4j/documents4j

documents4j 的官方主页地址为:https://documents4j.com


关于word转换处理所需要的 Maven 软件依赖,添加如下:

<!-- https://mvnrepository.com/artifact/com.documents4j/documents4j-local -->
<!-- word 转 pdf 服务器需要先有office环境,linux下需要 OpenOffice / LibreOffice -->
<dependency>
    <groupId>com.documents4j</groupId>
    <artifactId>documents4j-local</artifactId>
    <version>1.1.12</version>
</dependency>
<dependency>
    <groupId>com.documents4j</groupId>
    <artifactId>documents4j-transformer-msoffice-word</artifactId>
    <version>1.1.12</version>
</dependency>

如果还需要转换Excel则可以添加以下依赖

<!--   https://mvnrepository.com/artifact/com.documents4j/documents4j-transformer-msoffice-excel   -->
<dependency>
    <groupId>com.documents4j</groupId>
    <artifactId>documents4j-transformer-msoffice-excel</artifactId>
    <version>1.1.12</version>
</dependency>

如果还需要专函PPT则可以添加以下依赖

<!--   https://mvnrepository.com/artifact/com.documents4j/documents4j-transformer-msoffice-powerpoint   -->
<dependency>
    <groupId>com.documents4j</groupId>
    <artifactId>documents4j-transformer-msoffice-powerpoint</artifactId>
    <version>1.1.12</version>
</dependency>


三、关于跨平台的兼容性

documents4j 是一个 Java 库,用于将文档转换为另一种文档格式。这是通过将转换委托给任何本机应用程序来实现的,该应用程序了解将给定文件转换为所需的目标格式。documents4j 带有 MS Word 和 MS Excel for Windows 的转换,例如,允许将 DOCX 文件转换为 PDF 文件,而不会在生成的文档中出现通常的失真,这在使用 非Microsoft 产品进行的转换中经常观察到。


在转换处理上,它使用了Microsoft Office 的API,所以需要依赖Office软件。在Windows环境,我们安装Microsoft Office即可。如果是Linux环境,需要安装OpenOffice 或者LibreOffice


四、转换程序样例

documents4j的工作方式有2种:本地 和 远程。我们这里只讨论本地模式。程序处理步骤如下:

image.png


五、关于资源的回收

其实,大家看第四点的时候,应该知道,documents4j 它创建了一个转换器对象。其实这个转换器对象,在转换完毕后,不会销毁。这就像我们常用的线程池对象,我们用完线程归还即可,但是线程池是一直存在的。因此,为了回收资源,我们需要调用它的 shutDown 方法。处理如下:

image.png


六、关于转换效率和一致性

其实文档的转换的效率(即速度)不算太高,如果内容较少 大约 3-5秒一个文件 。如果内容很多,则较慢。

在文档一致性上,documents4j是较为优秀的,内容的格式处理上,基本一致。


本章节完结

填写一种颜色的字符(不区分大小写),1分钟有效,点击图片刷新