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

您所在的位置:网站首页 咋个去除水印 使用Aspose.Words将word转PDF并且去水印。

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

2023-06-29 03:10| 来源: 网络整理| 查看: 265

😜作           者:是江迪呀✒️本文关键词:Java、工具类、转换、word转pdf、Aspose.Words、后端☀️每日   一言:只要思想不滑坡,办法总比困难多。 前言

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

一、引入依赖

Aspose.Words官网地址

com.aspose aspose-words 21.6 jdk16

在这里插入图片描述

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

1.1 下载jar包

在这里插入图片描述 在这里插入图片描述

1.2 放入本地Maven仓库

在这里插入图片描述 **加粗样式**

在这里插入图片描述

重新加载下maven即可。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0defab5b033e4235a78562af1fe60690.png 如果你有私有的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; //去水印 removeWaterMark(); 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; //去水印 removeWaterMark(); 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}); } }

转换前: 在这里插入图片描述 转换后: 在这里插入图片描述 去水印后: 在这里插入图片描述

2.2 去水印思路

当我们有购买了许可证时,我们需要使用 License()方法认证许可证,只需要找到认证代码然后使用Java的反射机制将认证代码替换成认证通过即可。 (1)找到许可证验证

License license = new License(); license.setLicense(""); license.setLicense(new FileInputStream(""));

我们通过Debug可以发现认证使用到了两个静态参数:

package com.aspose.words; final class zzXyu { //认证 public static final byte[] zzZXG = new byte[]{69, 86, 65, 76, 85, 65, 84, 73, 79, 78}; //认证通过 public static final byte[] zz1Y = new byte[]{76, 73, 67, 69, 78, 83, 69, 68}; }

(2)通过Java反射拿到zzXyu类的Class对象

Class aClass = Class.forName("com.aspose.words.zzXyu");

(3)通过反射获取了名为 “zzZXG” 的字段对应的 Field 对象。=

java.lang.reflect.Field zzZXG = aClass.getDeclaredField("zzZXG");

(4)设置了字段zzZXG可访问,因为它是私有的

zzZXG.setAccessible(true);

(5)获取了zzZXG字段的类型对象(字段的修饰符)

java.lang.reflect.Field modifiersField = zzZXG.getClass().getDeclaredField("modifiers");

(5)设置修饰符可以被修改

modifiersField.setAccessible(true);

(6)去除zzZXG前面的final修饰符,便于后续修改

modifiersField.setInt(zzZXG, zzZXG.getModifiers() & ~Modifier.FINAL);

(7)设置zzZXG的值为校验通过

zzZXG.set(null,new byte[]{76, 73, 67, 69, 78, 83, 69, 70}); 三、总结

我们上述代码仅供参考学习!

注意:我们目前使用的Aspose.Words的版本是21.6,最新的版本是23.5,上面去除水印的代码仅支持到21.6。 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3