Aspose Words 20.6 for Java 去水印

4,069 阅读2分钟

1. 找到License.class

在words的jar包中找到License类.验证方法入口在这里
虽然有两个setLicense()方法,细心点看,最后调用的都是zzV方法,只是不同的重载。

public class License {
    private zz2B zzYIM = zz2B.zzoF();

    public License() {
    }

    public void setLicense(String licenseName) throws Exception {
        if (licenseName == null) {
            throw new NullPointerException(this.zzYIM.zzZu(new byte[]{108, 105, 99, 101, 110, 115, 101, 78, 97, 109, 101}));
        } else {
            (new zzZJ5()).zzV(licenseName, zzZY2.zzkc());
        }
    }

    public void setLicense(InputStream stream) throws Exception {
        if (stream == null) {
            throw new NullPointerException(this.zzYIM.zzZu(new byte[]{115, 116, 114, 101, 97, 109}));
        } else {
            (new zzZJ5()).zzV(stream);
        }
    }
}

进入zzV()方法
在zzV()方法下面有两个方法,类似于下面这样。

zzZaQ就是要修改的方法。让他始终返回1就好了

static int zzZaQ() {
        boolean var0 = zzYIF == null || zzYIF.zzYIH == 0 || (new Date()).after(zzYIF.zzYII) || zzYNP.zzYlS() == 4096;
        boolean var1 = zzZE1.zzYZQ() == 0;
        int var2 = var0 && var1 ? 0 : 1;
        return var2; // update , return 1
    }

    static int zzZaP() {
        boolean var0 = zzYIF == null || zzYIF.zzYIH == 0 || (new Date()).after(zzYIF.zzYII) || zzYNP.zzYlS() == 4096;
        boolean var1 = zzZE1.zzYZQ() == 0;
        int var2 = var0 && var1 ? 0 : 1;
        return var2;
    }

2. 利用Javassist修改字节码

Maven添加依赖

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>${javaassist.version}</version>
</dependency>
 
<properties>
    <javaassist.version>3.21.0-GA</javaassist.version>
</properties>

编写方法

public void removeWatermark() throws NotFoundException, CannotCompileException, IOException {
        ClassPool.getDefault().insertClassPath("xxxx"); // jar包的绝对路径
        CtClass targetClass = ClassPool.getDefault().getCtClass("com.aspose.words.zzZJ5"); //类路径
        CtMethod targetMethod = targetClass.getDeclaredMethod("zzZaQ"); //方法路径
        targetMethod.setBody("{return 1;}"); //修改方法体,始终返回1
        targetClass.writeFile("/Users/zexho/Documents/"); //保存修改,内容为保存的路径。
    }

3. 更新Jar包

  1. 将.jar包名后缀改为其他压缩格式。mac的改为tar,win可以改为zip
  2. 解压tar,将新生成class文件替换旧的
  3. 删除META-INF文件中的RSA和SF文件
  4. 确保当前位置在一级目录中,看到这两个文件的位置。
  5. 重新打包Jar jar cvf [新文件的名字.jar] .例如jar cvf aspose-slides-20.5-jdk16.jar .

4. Maven重新导入Jar包

在maven中导入该jar包。然后刷新就可以用了。

只能个人使用,不可商用