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

本文介绍了如何在Java项目中使用Aspose.Words库将Word文档转换为PDF,重点讨论了如何处理Aspose.Words的试用版水印问题,通过反射机制去除水印。文章提供了一个WordToPdfUtil工具类的示例代码,包括转换方法和去除水印的详细步骤。
摘要由CSDN通过智能技术生成
  • 😜           是江迪呀
  • ✒️本文关键词Java工具类转换word转pdfAspose.Words后端
  • ☀️每日   一言只要思想不滑坡,办法总比困难多。

前言

在我们日常开发中经常会有将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即可。
![在这里插入图片描述](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
在这里插入图片描述

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
对于Aspose.Words,可以使用它将Word文档转换PDF格式,然后使用PDF.js进行在线预览。 Aspose.Words是一个功能强大的文档处理库,可以帮助开发人员处理和转换多种文档格式。通过使用Aspose.WordsWord文档转换PDF,可以确保预览的准确性和稳定性。 转换步骤如下: 1. 使用Aspose.Words将服务器存储的Word文档转换PDF格式。 2. 使用PDF.js来加载和显示转换后的PDF文件,从而实现在线预览。 这种方法相对于使用ce.office.extension将Word文件转换为HTML预览,能够避免一些格式、图片和字体错乱的问题,因为PDF是一种更稳定和可靠的文档格式。 需要注意的是,使用Aspose.Words进行WordPDF时,可能会遇到试用版自动加水印的问题。如果需要去除水印,可以参考相应的教程进行操作。但是请注意,我们在这里只提供思路和参考,具体操作还需要根据你的实际需求和情况进行调整。 总结起来,aspose.words可以通过将Word转换PDF格式,然后使用PDF.js进行在线预览。这种方法可以提供更准确和稳定的预览效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Net Core3.1使用Aspose.Words18.4将WordPDF](https://blog.csdn.net/xiaomai4343/article/details/125384428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【2020.12】Aspose.words 20.12最新版Crack,wordpdf去水印方法](https://blog.csdn.net/xiaostuart/article/details/111479549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是江迪呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值