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;
}