Я использовал некоторые из предложений, которые я нашел здесь и на других сайтах / в постах, чтобы определить, является ли PDF верным или нет. Я намеренно испортил файл PDF, и, к сожалению, многие решения не обнаружили, что файл был поврежден.
В конце концов, после возни с разными методами в API, я попробовал это:
PDDocument.load(file).getPage(0).getContents().toString();
Это не выдало исключение, но вывело это:
WARN [COSParser:1154] The end of the stream doesn't point to the correct offset, using workaround to read the stream, stream start position: 171, length: 1145844, expected end position: 1146015
Лично я хотел, чтобы было выброшено исключение, если файл был поврежден, чтобы я мог обработать его сам, но оказалось, что API, который я реализовывал, уже обрабатывал их по-своему.
Чтобы обойти это, я решил попробовать проанализировать файлы, используя класс, который дал теплое утверждение (COSParser). Я обнаружил, что существует подкласс PDFParser, унаследовавший метод setLenient, который был ключом (https://pdfbox.apache.org/docs/2.0.4/javadocs/org/apache/pdfbox/pdfparser/COSParser.html).
Затем я реализовал следующее:
RandomAccessFile accessFile = new RandomAccessFile(file, "r");
PDFParser parser = new PDFParser(accessFile);
parser.setLenient(false);
parser.parse();
Это вызвало исключение для моего поврежденного файла, как я и хотел. Надеюсь, это кому-нибудь поможет!