最近有个需求是提供word文档预览和转PDF的功能,预览计划是先word转图片做预览,试了几款软件,最终选用Aspose.words工具,但是试用版会自动加水印,下附去水印教程,仅提供思路参考。
先在官网下载最新版20.12的jar包,选择jdk17的后缀。在项目中使用maven导入aspose.words转PDF有水印。
com.aspose aspose-words 20.12 jdk17测试代码为
然后加入设置License的代码找到关键逻辑,在License.class中发现最终都会调用com.aspose.words.zzZDZ#zzV这个方法,进到这个类,把zzV方法下方的com.aspose.words.zzZDZ#zzZ4n和com.aspose.words.zzZDZ#zzZ4m通过javassist反编译把返回值改成1再重新打包回jar就可以去水印了
项目中引入javassis
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
破解代码
@Test
void crackAsposeWords() throws Exception {
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-crack.jar(取名随意)
进到解压后的文件夹根目录执行下述命令
jar cvfm aspose-words-20.12-jdk17-crack.jar META-INF/MANIFEST.MF com/
1
把生成的破解包引入项目中,发现jar包中的那两个方法的返回值确实已经被修改了,再进行转PDF发现水印不存在,亲测可用。记录一下,后续最新版也按照这个方法破解以支持word版本升级引起的兼容性问题。
对了,如果是放在Linux服务器上运行,需要在服务器上安装Windows中文字体库,否则会有中文乱码问题。