улавливать предупреждения PDFBox при загрузке ошибочных PDF-файлов

#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 заключается в том, что вы хотите снисхождения для какого-либо файла со сломанным шифрованием. Это не связано.