使用Aspose.Words将word转PDF并且去水印。

前言

在我们日常开发中经常会有将word文档转为PDF的场景,有很多种方法我最倾向的的是使用Aspose.Words,原因是转出的PDF内容不会缺失很好用。但是Aspose.Words如果使用的话需要付费,不然转出的PDF会带有水印,但是可以通过代码去除,仅供研究学习。下面让我一起来研究学习下吧。

一、引入依赖

Aspose.Words官网地址

<dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>21.6</version><classifier>jdk16</classifier>
</dependency>

问题:我们会发现使用POM文件引入依赖的方式无法下载jar包,我们可以通过在官网下载jar放到本地maven仓库的方式解决。

1.1 下载jar包


1.2 放入本地Maven仓库


重新加载下maven即可。

如果你有私有的maven仓库那就更好办了,直接将jar包上传到私有maven仓库即可。

二、示例代码

2.1 WordToPdfUtil工具类:

import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
import lombok.extern.slf4j.Slf4j;import java.io.FileOutputStream;
import java.io.InputStream;@Slf4j
public class WordsToPDFUtil {/*** 输出到指定的目录* @param is* @param toPath* @param fileName*/public static void wordToPdf(InputStream is, String toPath,String fileName){Document doc = null;if (!getLicense()) {//去除水印失败直接返回return;}try {String resultPath = toPath + fileName + ".pdf";FileOutputStream os = new FileOutputStream(resultPath);doc = new Document(is);doc.save(os, SaveFormat.PDF);} catch (Exception e) {e.printStackTrace();}}/*** 返回byte数组* @param is*/public static byte[] wordToPdf(InputStream is){Document doc = null;if (!getLicense()) {//去除水印失败返回空return null;}try {// 创建一个字节数组输出流ByteArrayOutputStream outputStream = new ByteArrayOutputStream();doc = new Document(is);doc.save(outputStream, SaveFormat.PDF);return outputStream.toByteArray();} catch (Exception e) {e.printStackTrace();}return null;}/*** 去除水印* 使用反射替换变量* @return*/private void removeWaterMark() throws Exception {Class<?> aClass = Class.forName("com.aspose.words.zzXyu");java.lang.reflect.Field zzZXG = aClass.getDeclaredField("zzZXG");zzZXG.setAccessible(true);java.lang.reflect.Field modifiersField = zzZXG.getClass().getDeclaredField("modifiers");modifiersField.setAccessible(true);modifiersField.setInt(zzZXG, zzZXG.getModifiers() & ~Modifier.FINAL);zzZXG.set(null,new byte[]{76, 73, 67, 69, 78, 83, 69, 70});}
}

转换前:

转换后:

去水印后:

注意:我们目前使用的Aspose.Words的版本是21.6,最新的版本是23.5

上面去除水印的代码仅支持到21.6。上述代码仅供参考学习。

本文链接:https://my.lmcjl.com/post/2796.html

展开阅读全文

4 评论

留下您的评论.