Как читать PDF файлы, созданные с помощью неизвестного случайного пароля владельца?

Требование - обрабатывать пакет PDF по одному за раз и при успешном шифровании каждого из них с помощью пароля пользователя.

Однако эти PDF файлы ранее были зашифрованы случайным образом созданным динамическим паролем владельца (не знаю никому), чтобы предотвратить любые изменения.

Я использую iText для шифрования, как показано ниже:

byte[] userPass = "user".getBytes();
byte[] ownerPass = "owner".getBytes();
PdfReader reader = new PdfReader("Misc.pdf");

PdfStamper stamper = new PdfStamper(reader,
            new FileOutputStream("Processed_Encrypted.pdf"));
stamper.setEncryption(userPass, ownerPass,
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128
        | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
reader.close();

Но этот код вызывает com.itextpdf.text.exceptions.BadPasswordException: PdfReader not opened with owner password

Может ли какое-нибудь руководство по разрешению этого пароля ошибки/обхода владельца?

Здесь я хотел бы пояснить, что мы юридически владеем этими PDF файлами, поэтому преступление/хакинг не совершается.

P.S.. Решение не ограничивается iText, может использовать любую другую библиотеку Java (бесплатно или лицензировано).

Ответ 1

PdfReader имеет недокументированную переменную static boolean с именем unethicalreading. По очевидным причинам эта переменная по умолчанию установлена ​​на false. Вы можете установить эту переменную в true следующим образом:

PdfReader.unethicalreading = true;

С этого момента PdfReader будет игнорировать наличие пароля владельца. Он будет генерировать только исключение, если пароль пользователя на месте.

Используйте это на свой страх и риск.