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

news/2024/7/19 8:46:42 标签: word, pdf, java, 工具类, 后端, 爬虫, 转换
  • 😜           :是江迪呀
  • ✒️本文关键词Java工具类转换wordpdfAspose.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工具类

java">word">import com.aspose.words.Document;
word">import com.aspose.words.SaveFormat;
word">import lombok.extern.slf4j.Slf4j;

word">import java.io.FileOutputStream;
word">import java.io.InputStream;

@Slf4j
word">public word">class WordsToPDFUtil {
    /**
     * 输出到指定的目录
     * @param is
     * @param toPath
     * @param fileName
     */
    word">public word">static word">void wordToPdf(InputStream is, String toPath,String fileName){
        Document doc = word">null;
      	 //去水印
       	removeWaterMark();
        word">try {
            String resultPath = toPath + fileName + ".pdf";
            FileOutputStream os = word">new FileOutputStream(resultPath);
            doc = word">new Document(is);
            doc.save(os, SaveFormat.PDF);
        } word">catch (Exception e) {
            e.printStackTrace();
        }
    }
    
 	 /**
     * 返回byte数组
     * @param is
     */
    word">public word">static word">byte[] wordToPdf(InputStream is){
        Document doc = word">null;
        //去水印
       	removeWaterMark();
        word">try {
            // 创建一个字节数组输出流
            ByteArrayOutputStream outputStream = word">new ByteArrayOutputStream();
            doc = word">new Document(is);
            doc.save(outputStream, SaveFormat.PDF);
            word">return outputStream.toByteArray();
        } word">catch (Exception e) {
            e.printStackTrace();
        }
        word">return word">null;
    }
        /**
     * 去除水印
     * 使用反射替换变量
     * @return
     */
     word">private word">void removeWaterMark() word">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(word">null,word">new word">byte[]{76, 73, 67, 69, 78, 83, 69, 70});
    }
}

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

注意:我们目前使用的Aspose.Words的版本是21.6,最新的版本是23.5
在这里插入图片描述

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


http://www.niftyadmin.cn/n/456755.html

相关文章

学习mysql

Mysql SQL语言的规则与规范SQL大小写规范注释数据导入指令 基本的SELECT语句SELECT.列的别名去掉重复行空值参与运算着重号(当有表名是关键字时)显示表结构where 运算符算术运算符 比较运算符号性运算符非符号形运算符空运算符非空运算符最小值运算符最大值运算符BETWEEN AND运…

Golang每日一练(leetDay0101) 最长递增子序列I\II\个数

目录 300. 最长递增子序列 Longest Increasing Subsequence &#x1f31f;&#x1f31f; 2407. 最长递增子序列 II Longest Increasing Subsequence ii &#x1f31f;&#x1f31f;&#x1f31f; 673. 最长递增子序列的个数 Number of Longest Increasing Subsequence &a…

安装Node,环境配置详细教程及使用

安装Node&#xff0c;环境配置详细教程及使用 一.下载 https://nodejs.org/en/download 一般现在windows电脑都选64位&#xff0c;如果是其他系统或者需要更低的版本可以按照自己的需求进行下载安装&#xff0c;过程都大差不多 二.安装 node.js的安装过程一般都不需要勾选什…

数据安全--27--数据安全管理之基础管理篇

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/131317315 一、基础管理篇概述 数据安全在广义上讲是一个很大的概念&#xff0c;依据《数据安全法》第三条&#xff0c;数据安全是指通过采取必要措施&#xff0c;确保数据处于有效保护和合法利用的状…

LeetCode - 28 找出字符串中第一个匹配的下标

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 28. 找出字符串中第一个匹配项的下标 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下…

神经网络:池化操作

在计算机视觉中&#xff0c;池化操作是一种常用的特征降维技术&#xff0c;它在卷积神经网络&#xff08;CNN&#xff09;中起着重要的作用。池化操作主要有以下作用和意义&#xff1a; 1. 特征降维&#xff1a; 池化操作可以减小特征图的尺寸&#xff0c;从而降低了模型的计…

c++ vector的扩容机制

1、当向vector push_back一个元素时&#xff0c;如果此时元素个数超过了vector的容量&#xff0c;会触发扩容 2、扩容的过程是&#xff1a;开辟新空间->拷贝旧空间的元素->释放旧空间 3、扩容过程中开辟新空间的大小影响着往vector插入元素的效率&#xff1a; 如果新空…

【从零开始学习JAVA | 第五篇】This关键字详解

目录 前言&#xff1a; This关键字&#xff1a; 作用&#xff1a; 本质&#xff1a; 总结&#xff1a; 前言&#xff1a; 相信大家在进入JAVA面向对象编程篇章以后&#xff0c;多多少少都见过This关键字&#xff0c;而他的指向很多人总是傻傻搞不清楚&#xff0c;今天我们…