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

0x4*_*16e 2 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 {
            pdfStamper = new PdfStamper(pdfReader, baos); //exc here
            ...
            }
            ...
        } catch (DocumentException var8) {
            ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

例外:

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
Run Code Online (Sandbox Code Playgroud)

我检查了有关此主题的其他线程,似乎最简单的解决方案是添加 PdfReader.unethicalreading = true;

但是,我被迫使用 iText 2.1.7 或更早版本( com.lowagieiText)而不是 iText 5.0.0 或更新版本( com.itextpdfiText)PdfReader.unethicalreading旧版本的库中不存在。

Jor*_*lla 8

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)