最近有个需求是提供word
文档预览和转PDF
的功能,预览计划是先word
转图片做预览,试了几款软件,最终选用Aspose.words
工具,但是试用版会自动加水印,下附去水印教程,仅提供思路参考。
导入 aspose 进行测试
先在官网下载最新版20.12
的jar
包,选择jdk17
的后缀。在项目中使用maven
导入aspose.words
转PDF
有水印。
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>20.12</version>
<classifier>jdk17</classifier>
</dependency>
测试代码:
Document doc = new Document(inPath);
doc.save(outPath, SaveFormat.PDF);
生成好之后的Pdf
文件中带有水印字样。
破解逻辑
设置License的代码找到关键逻辑,在License.class
中发现最终都会调用com.aspose.words.zzZDZ#zzV
这个方法。
进到这个类,把zzV
方法下方的com.aspose.words.zzZDZ#zzZ4n
和com.aspose.words.zzZDZ#zzZ4m
通过javassist
反编译把返回值改成1
再重新打包回jar
就可以去水印了。
Javassis 反编译修改
引入jar
包
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
破解代码
@Test
public void crackAsposeWords() throws Exception {
// 原始jar包所在位置
ClassPool.getDefault().insertClassPath("C:\\Users\\coder\\Downloads\\aspose-words-20.12-jdk17.jar");
CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.words.zzZDZ");
CtMethod zzZ4u = zzZJJClass.getDeclaredMethod("zzZ4n");
CtMethod zzZ4t = zzZJJClass.getDeclaredMethod("zzZ4m");
zzZ4u.setBody("{return 1;}");
zzZ4t.setBody("{return 1;}");
zzZJJClass.writeFile("C:\\Users\\coder\\Desktop\\");
}
运行后会生成一个com
的文件夹,里面就包含了修改过的字节码。
解压原始的aspose-words-20.12-jdk17.jar
,把上述生成的的com
文件夹覆盖到解压后的目录中,再把META-INF
文件夹里的.RSA
和.SF
文件删除即可
最后把破解后的字节码文件重新打包为jar
,取名为aspose-words-20.12-jdk17.jar
进到解压后的文件夹根目录执行下述命令
jar cvfm aspose-words-20.12-jdk17.jar META-INF/MANIFEST.MF com/
把生成的破解包覆盖本地maven
仓库中的jar
包。
生成出来的PDF
没有水印字样。
word 2 pdf 代码
破解后的jar包
下载下来之后,直接覆盖到maven
仓库中