Java iText-读取使用未知随机所有者密码创建的PDF

Java iText-读取使用未知随机所有者密码创建的PDF,java,pdf,itext,pdf-reader,Java,Pdf,Itext,Pdf Reader,执行此代码时,我遇到以下异常: public byte[] watermarking(byte[] orig) throws IOException { PdfReader pdfReader = new PdfReader(orig); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfStamper pdfStamper = null; try {

执行此代码时,我遇到以下异常:

public byte[] watermarking(byte[] orig) throws IOException {
        PdfReader pdfReader = new PdfReader(orig);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        PdfStamper pdfStamper = null;

        try {
            pdfStamper = new PdfStamper(pdfReader, baos); //exc here
            ...
            }
            ...
        } catch (DocumentException var8) {
            ...
        }
    }
例外情况:

11:43:11,094 ERROR [de.mlp.xbg.pa.rest.SessionRR] (http-/127.0.0.1:8081-6) PdfReader not opened with owner password: java.lang.IllegalArgumentException: PdfReader not opened with owner password
我检查了关于这个主题的其他线程,似乎最简单的解决方案是添加
PdfReader.unethicalreading=true

但是,我不得不使用iText 2.1.7或更早版本(
com.lowagie
iText),而不是iText 5.0.0或更新版本(
com.itextpdf
iText)
PdfReader。旧版本的库中不存在不道德的阅读。

似乎有一种解决方法,可以让iText忽略密码,并附带免责声明

通过执行下面的代码,我将法律问题留给您处理


为什么您不得不使用一个古老且未维护的版本的iText,而该版本不包含您需要的功能?如果您查看源代码(),您将看到
不道德阅读
被添加到iText 5.0.2中(
com.itextpdf
iText)。更准确地说,在这个承诺中:2010年3月31日。这意味着您使用的iText版本至少有6年历史。
public static PdfReader unlockPdf(PdfReader reader) {
    if (reader == null) {
        return reader;
    }
    try {
        java.lang.reflect.Field f = reader.getClass().getDeclaredField("encrypted");
        f.setAccessible(true);
        f.set(reader, false);
    } catch (Exception e) { /* ignore */ }
    return reader;
}