iText - читать PDF-файлы, созданные с неизвестным паролем случайного владельца

Я получаю следующее исключение при выполнении этого кода:

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.unethicalreading не существует в старой версии библиотеки.

1 ответ

Решение

Здесь, кажется, есть обходной путь, чтобы заставить iText игнорировать пароль с отказом от ответственности:

Я оставляю юридические вопросы на ваше усмотрение, выполнив код ниже.

public static PdfReader unlockPdf(PdfReader reader) {
    if (reader == null) {
        return reader;
    }
    try {
        Field f = reader.getClass().getDeclaredField(“encrypted”);
        f.setAccessible(true);
        f.set(reader, false);
    } catch (Exception e) { // ignore }

    return reader;
}
Другие вопросы по тегам