- ??作 ? ??????? 者:是江迪呀
- ??本文關(guān)鍵詞:
Java
、工具類
、轉(zhuǎn)換
、word轉(zhuǎn)pdf
、Aspose.Words
、后端
- ??每日?? 一言:
只要思想不滑坡,辦法總比困難多。
前言
在我們?nèi)粘i_發(fā)中經(jīng)常會有將word文檔
轉(zhuǎn)為PDF
的場景,有很多種方法我最傾向的的是使用Aspose.Words
,原因是轉(zhuǎn)出的PDF
內(nèi)容不會缺失很好用。但是Aspose.Words
如果使用的話需要付費,不然轉(zhuǎn)出的PDF
會帶有水印,但是可以通過代碼去除,僅供研究學(xué)習(xí)
。下面讓我一起來研究學(xué)習(xí)下吧。
一、引入依賴
Aspose.Words官網(wǎng)地址
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>21.6</version>
<classifier>jdk16</classifier>
</dependency>
問題:我們會發(fā)現(xiàn)使用POM文件引入依賴的方式無法下載jar包,我們可以通過在官網(wǎng)下載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;
//去水印
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數(shù)組
* @param is
*/
public static byte[] wordToPdf(InputStream is){
Document doc = null;
//去水印
removeWaterMark();
try {
// 創(chuàng)建一個字節(jié)數(shù)組輸出流
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});
}
}
轉(zhuǎn)換前:
轉(zhuǎn)換后:
去水印后:
2.2 去水印思路
當我們有購買了許可證時,我們需要使用 License()
方法認證許可證,只需要找到認證代碼
然后使用Java的反射
機制將認證代碼
替換成認證通過即可。
(1)找到許可證
驗證
License license = new License();
license.setLicense("");
license.setLicense(new FileInputStream(""));
我們通過Debug
可以發(fā)現(xiàn)認證使用到了兩個靜態(tài)參數(shù):
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” 的字段對應(yīng)的 Field 對象。=
java.lang.reflect.Field zzZXG = aClass.getDeclaredField("zzZXG");
(4)設(shè)置了字段zzZXG
可訪問,因為它是私有的
zzZXG.setAccessible(true);
(5)獲取了zzZXG
字段的類型對象(字段的修飾符)
java.lang.reflect.Field modifiersField = zzZXG.getClass().getDeclaredField("modifiers");
(5)設(shè)置修飾符可以被修改
modifiersField.setAccessible(true);
(6)去除zzZXG
前面的final
修飾符,便于后續(xù)修改
modifiersField.setInt(zzZXG, zzZXG.getModifiers() & ~Modifier.FINAL);
(7)設(shè)置zzZXG
的值為校驗通過
zzZXG.set(null,new byte[]{76, 73, 67, 69, 78, 83, 69, 70});
三、總結(jié)
我們上述代碼僅供參考學(xué)習(xí)!
文章來源:http://www.zghlxwxcb.cn/news/detail-500341.html
注意:我們目前使用的Aspose.Words
的版本是21.6
,最新的版本是23.5
,上面去除水印的代碼僅支持到21.6
。文章來源地址http://www.zghlxwxcb.cn/news/detail-500341.html
到了這里,關(guān)于使用Aspose.Words將word轉(zhuǎn)PDF并且去水印。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!