用aspose slide为ppt文件生成预览图片,生成图片有水印,可以用javassist修改jar包的方式来去除水印限制
pom文件
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-slides</artifactId>
<version>22.9</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/aspose-slides-22.9-jdk16.jar
</systemPath>
<classifier>jdk16</classifier>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.28.0-GA</version>
</dependency>
填个错的license试试
String license =
"<License>\n" +
" <Data>\n" +
" <Products>\n" +
" <Product>Aspose.Total for Java</Product>\n" +
" <Product>Aspose.Words for Java</Product>\n" +
" </Products>\n" +
" <EditionType>Enterprise</EditionType>\n" +
" <SubscriptionExpiry>20991231</SubscriptionExpiry>\n" +
" <LicenseExpiry>20991231</LicenseExpiry>\n" +
" <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-</SerialNumber>\n" +
" </Data>\n" +
"</License>";
InputStream is = new ByteArrayInputStream(license.getBytes(StandardCharsets.UTF_8));
License aposeLic = new License();
aposeLic.setLicense(is);
看看报错信息
2022-12-04 03:03:45.498 ERROR 63412 --- [nio-8091-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is class com.aspose.slides.exceptions.InvalidOperationException: License parsing error ---> class com.aspose.slides.exceptions.InvalidOperationException: Signature check error. ---> java.security.SignatureException: Signature length not correct: got 0 but was expecting 256
--- End of inner exception stack trace ---
com.aspose.slides.internal.oh.final.do(Unknown Source)
com.aspose.slides.internal.oh.return.do(Unknown Source)
com.aspose.slides.internal.oh.return.if(Unknown Source)
com.aspose.slides.internal.oh.return.do(Unknown Source)
com.aspose.slides.License.setLicense(Unknown Source)
com.aspose.slides.internal.oh.return类的do方法
private static void do(Node var0, Node var1, String[] var2) {
try {
String var3 = var0 != null ? do(var0) : "";
byte[] var4 = var3.getBytes("UTF-16LE");
String var5 = var1 != null ? var1.getFirstChild().getNodeValue() : "";
byte[] var6 = com.aspose.slides.internal.oh.try.do(var5);
PublicKey var7 = null;
try {
KeyFactory var8 = KeyFactory.getInstance("RSA");
RSAPublicKeySpec var9 = this.do(if(var2), var6);
var7 = var8.generatePublic(var9);
} catch (Exception var15) {
(new final() {
}).do((new boolean() {
}).if, var15);
}
Signature var17;
if (var6.length == 128) {
var17 = Signature.getInstance("SHA1withRSA");
var17.initVerify(var7);
var17.update(var4);
do(var17, var6);
} else {
try {
var17 = Signature.getInstance("SHA256withRSA");
var17.initVerify(var7);
var17.update(var4);
do(var17, var6);
} catch (InvalidOperationException var14) {
InvalidOperationException var18 = var14;
try {
String var19;
if (if(var2)) {
var19 = long.if(var6);
} else {
var19 = long.do(var6);
}
String var10 = "AQAB";
byte[] var11 = com.aspose.slides.internal.oh.try.do(var19);
byte[] var12 = com.aspose.slides.internal.oh.try.do(var10);
if (!implements.do(var4, var6, var11, var12)) {
(new final() {
}).do((new boolean() {
}).int, var18);
}
} catch (Exception var13) {
(new final() {
}).do((new boolean() {
}).int, var14);
}
}
}
} catch (Exception var16) {
(new final() {
}).do((new boolean() {
}).int, var16);
}
}
方法签名是void,没有返回值,应该是里面做了什么见不得人的事
修改启动方法
@SpringBootApplication
public class PptApplication {
public static void main(String[] args) {
// SpringApplication.run(PptApplication.class, args);
modifyPptJar();
}
public static void modifyPptJar() {
try {
ClassPool.getDefault().insertClassPath("/Users/bao/Documents/devworkspace/java/ppt/src/main/resources/lib/aspose-slides-22.9-jdk16.jar");//jar包地址
CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.slides.internal.oh.return"); //修改这个类
CtMethod[] methodA = zzZJJClass.getDeclaredMethods();
for (CtMethod ctMethod : methodA) {
CtClass[] ps = ctMethod.getParameterTypes();
if (ps.length == 3 && ctMethod.getName().equals("do")) {//3个参数并且方法名是do的方法
System.out.println("ps[0].getName==" + ps[0].getName());
ctMethod.setBody("{}"); //把这个方法清空
}
}
zzZJJClass.writeFile("/Users/bao/Desktop");//把修改后的文件保存到桌面
} catch (Exception e) {
System.out.println("错误==" + e);
}
}
}
解压原始jar包,删除里面的ASPOSE.RSA文件和ASPOSE.SF文件,然后把桌面新生成的/Users/bao/Desktop/com/aspose/slides/internal/oh/return.class文件放到jar包里,mac可以用maczip这个软件,也不用解压,直接文件拖到maczip里,问你是否替换,确定就可以更新jar包了
最后把新的jar包加到项目里,maven更新下就没水印了