用ASPOSE将PDF转为word(解除页数限制和去水印)

相关链接

https://xie.infoq.cn/article/7d475ca4d2eb4632c2459fe05

https://github.com/xinxiamu/java-core/blob/c94d82daaff37f8efba04cdd87631e79f4d1f266/core/src/main/java/com/ymu/study/office/AsposeCrack.java

https://www.cnblogs.com/Chary/articles/15843737.html

aspose官方jar包链接:

https://releases.aspose.com/java/repo/com/aspose/aspose-pdf/23.1/

javassist依赖

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.26.0-GA</version>
</dependency>

相关步骤

首先在aspose官网仓库找到你所需要版本并下载(我下载的是23.1版本的),然后将jar包添加到项目,并添加javassist依赖,用javassist修改com.aspose.pdf.ADocument这个类,主要是这个类有限制pdf转word的页数,以及添加水印,每个版本jar包应该是不一样的,具体我也不是很懂(如果谁明白可以告诉我…),23.1版本的是ADocument的lI(限制页数)和lt(添加水印)方法,用javassist找到并修改这两个方法生成class文件,最后拿生成出来的com.aspose.pdf.ADocument的class文件覆盖jar包里的class,并删除jar包里META-INF文件夹下的.rsa和.sf文件,然后重新添加jar包就可以了。

相关代码

package TestAspose;

import com.aspose.pdf.DocSaveOptions;
import com.aspose.pdf.Document;
import com.aspose.pdf.devices.JpegDevice;
import com.aspose.pdf.devices.Resolution;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


/**
 * @ClassName TestAspose
 * @Description TODO
 * @Author guoqk
 * @Version 1.0
 *
 **/
public class TestAspose {

    public static final String DESKTOP = "C:\\Users\\guoqk\\Desktop\\";
    public static final String ALL_CLASS_NAME = "com.aspose.pdf.ADocument";

    public static void main(String[] args) throws Exception {
        //ConvertPDFtoWord();
        crack();
    }

    /**
     * pdf转为word
     */
    public static void ConvertPDFtoWord()
    {
        Document pdfDocument = new Document(DESKTOP + "123.pdf");
        DocSaveOptions saveOptions = new DocSaveOptions();
        //指定保存为word的格式
        saveOptions.setFormat(DocSaveOptions.DocFormat.DocX);

        pdfDocument.save(DESKTOP +"123_out.docx", saveOptions);
    }

    /**
     * 修改class文件
     * @throws Exception
     */
    public static void crack() throws Exception{
        ClassPool.getDefault().insertClassPath(DESKTOP + "aspose-pdf-23.1.jar");
        CtClass ctClass = ClassPool.getDefault().getCtClass(ALL_CLASS_NAME);
        CtMethod[] declaredMethods = ctClass.getDeclaredMethods();

        for (CtMethod declaredMethod : declaredMethods) {
            CtClass[] parameterTypes = declaredMethod.getParameterTypes();

            //-----------解除限制-----------
            //如果参数是两个,参数方法名是“lI”,第一个参数的全限定类名是ALL_CLASS_NAME,返回值类型是boolean的
            if (parameterTypes.length==2 && declaredMethod.getName().equals("lI") &&
            parameterTypes[0].getName().equals(ALL_CLASS_NAME) && declaredMethod.getReturnType().getName().equals("boolean")){
                //System.out.println(parameterTypes[0].getName());
                //System.out.println(parameterTypes[1].getName());
                //修改方法体
                declaredMethod.setBody("{return false;}");
            }
            //-----------------------------

            
            //-----------去除水印-----------
            //如果方法名是“lt”而且方法没有参数
            if(declaredMethod.getName().equals("lt") && parameterTypes.length == 0){
                declaredMethod.setBody("{return true;}");
            }
            //-----------------------------
        }
        ctClass.writeFile(DESKTOP);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值