Я не могу открыть этот PDF-файл на Acrobat Reader, он говорит мне об ошибке (на французском языке) без ошибки кода. Как я могу получить больше информации о предупреждении об ошибке при открытии PDF-файла в программе Acrobat Reader, есть ли ярлык для отображения дополнительной информации об ошибке, потому что в настоящее время он говорит только на французском языке:
"Произошла ошибка при чтении документа, возможно, он поврежден и не может быть
отремонтировать "
В Chrome PDF Viewer я могу открыть эту ошибку-original.pdf
PS: вот еще один ok-original.pdf , который работает при открытии с помощью Acrobat Reader.
Я на Windows10, Acrobat Reader Версия: 19.10.20098.316574
Я не могу объяснить, почему мой файл error-original.pdf поврежден, возможно, после некоторых манипуляций с pdfbox, но не может воспроизвести. Мой вопрос, как получить больше информации об этой ошибке.
ОБНОВЛЕНИЕ № 1 (подробнее)
Вот код, который я использую для подготовки / манипулирования моим оригиналом.pdf
Этот код делает 4 вещи:
1. установить частичное имя поля (аналогично текущему значению поля)
2. удалить все ссылки на страницах
3. удалить поле с пустым значением ||
4. временное сжатие, чтобы попытаться получить некоторый октет случайно, используя метод @mkl OptimizeAfterMerge.java
Document pdfOriginal = PDDocument.load(f.toFile());
//1.set field partialName like his current value
pdfOriginal.getDocumentCatalog().getAcroForm().getFields().forEach(field -> {
if (field instanceof PDTextField && !field.getValueAsString().contains("--")
&& !field.getValueAsString().isBlank() && !field.getValueAsString().isEmpty()) {
field.setPartialName(field.getValueAsString());
}
});
//2.remove all link in document
removeLinksInPages(pdfOriginal);
//3.remove field with empty||blank value
pdfOriginal.getDocumentCatalog().getAcroForm().getFields().forEach(field -> {
if (field instanceof PDTextField
&& (field.getValueAsString().isBlank() || field.getValueAsString().isEmpty())) {
try {
removeField(pdfOriginal, field.getPartialName());
} catch (IOException e) {
e.printStackTrace();
}
}
});
pdfOriginal.save(new File(f.toAbsolutePath().toString()));
pdfOriginal.close();
//4.try to compress to gain some octets
PDDocument compress = PDDocument.load(f.toFile());
OptimizePdfDocument.optimize(compress);
compress.save(new File(f.toAbsolutePath().toString()));
compress.close();
Используемый метод:
removeLinksInPages (...)
removeField (...)
N.B. Я не могу подтвердить, что этот код всегда выводит исправленный файл, потому что это не так, но иногда, если я открываю файл с помощью Acrobat Reader, его невозможно прочитать.
(сообщение @mkl: поверьте мне, я не говорю здесь о повреждении файла одним из ваших методов, и я знаю, что ваше сжатие предназначено для объединенного файла, не волнуйтесь, я, конечно, поступаю неправильно и пытаюсь найти проблему, спасибо за понимание)
ОБНОВЛЕНИЕ № 2 (странный результат)
Я сталкиваюсь со странной вещью: просто запустив этот код pdfbox на вышеуказанный поврежденный файл error-original.pdf :
PDDocument pdfOriginal = PDDocument.load(new File(".../error-original.pdf"));
pdfOriginal.save(new File(".../error-original.pdf"));
pdfOriginal.close();
Acrobat Reader может открывать выдачу (нетронутый файл PDF), но при прокрутке Acrobat Reader появляется другая ошибка: «эта страница имеет ошибку, программа Acrobat Reader не может показать эту страницу. Свяжитесь с автором PDF для решения проблемы», и когда я закрыть error-alert-popup Я могу продолжать прокручивать и читать мой PDF.
Вы можете попробовать открыть с помощью Acrobat Reader этот error-on-scroll.pdf
ps: сообщение для @acrobatreader: проблема в том, что я АВТОР PDF, и я не знаю, как решить (шутка)
@ KenS, не могли бы вы дать какие-то комментарии, похоже, ошибка на стр. 2