#java #pdfbox
#java #pdfbox
Вопрос:
при загрузке PDF с помощью PDFBox появляются предупреждения на уровне журнала, если PDF является ошибочным:
PDDocument doc = PDDocument.load (new File (filename));
Например, это может привести к следующему выводу на консоль:
Dez 08, 2020 9:14:41 AM org.apache.pdfbox.pdfparser.COSParser validateStreamLength
WARNING: The end of the stream doesn't point to the correct offset, using workaround to read the stream, stream start position: 3141, length: 1674, expected end position: 4815
Очевидно, что в потоке содержимого pdf есть некоторые ошибки, но он загружается doc
. Но можно ли программно перехватить эти предупреждения с помощью PDFBox? Существуют ли какие-либо свойства, которые сообщают вам о предупреждениях после загрузки документа?
Я пробовал PDFBox-Preflight, но это проверяет соответствие PDF / A, что приводит к гораздо большему количеству сообщений.
Ответ №1:
Попробуйте не щадящий режим синтаксического анализатора. Этот код взят из ShowSignature.java пример:
RandomAccessBufferedFileInputStream raFile = new RandomAccessBufferedFileInputStream(file);
// If your files are not too large, you can also download the PDF into a byte array
// with IOUtils.toByteArray() and pass a RandomAccessBuffer() object to the
// PDFParser constructor.
PDFParser parser = new PDFParser(raFile);
parser.setLenient(false);
parser.parse();
PDDocument document = parser.getPDDocument();
Комментарии:
1. Это решение не работает с файлом, прикрепленным в issues.apache.org/jira/browse/PDFBOX-5062
2. Ответ здесь о «не снисходительности». Ваш вопрос JIRA заключается в том, что вы хотите снисхождения для какого-либо файла со сломанным шифрованием. Это не связано.