Проверка в файле PDF-A

Я пытаюсь реализовать Java-PDF-валидатор с использованием PdfBox. Файл, с которым я имею дело, это pdf с цифровой подписью (PADES). Либо я использую pdfbox, либо онлайн-инструмент, результат:

        PreflightDocument document = parser.getPreflightDocument();
        document.validate();

1.1 : Header Syntax error, First line must match %PDF-1.\d
1.1 : Header Syntax error, Second line must begin with '%' followed by at least 4 bytes greater than 127
1.0 : Syntax error, Missing end of file marker '%%EOF'

Но когда я открываю файл любым читателем, его формат действительно pdf-a. Если заглянуть внутрь pdf, первая строка - это не%PDF-1 или последний %%EOF. Май, потому что PDF подписан. Может ли это быть? И в случае, как я могу преодолеть этот вид проверки в подписанном PDF?

0ƒ;f    *†H†÷
 ƒ;V0ƒ;Q10
    `†He
 ƒ;‡=ƒ;‡8%PDF-1.4
%ÿÿÿÿ
1 0 obj
<<
...
....
.....

Чтобы заметить "%PDF-1.4" в конце 4-й строки

1 ответ

конкретизировать комментарий Тилмана немного...

Заголовок

Согласно спецификации PDF ISO 32000-1:

7.5.2 Заголовок файла

Первая строка файла PDF должна быть заголовком, состоящим из 5 символов %PDF–, за которым следует номер версии формы 1.N, где N - это цифра от 0 до 7.

Как указывает "должен", это требование. Таким образом, ваш файл не только не является действительным документом PDF/A, но даже не является действительным PDF.

Если вам интересно, почему Adobe Reader не жалуется... Adobe в своем PDF 1.7 Ссылка в Приложении H.3 "Примечания к реализации" указывает, что их программное обеспечение обрабатывает требование заголовка PDF довольно слабо:

  1. Для просмотра Acrobat требуется, чтобы заголовок находился где-то в первых 1024 байтах файла.

Таким образом, у вас есть недействительный PDF, который, тем не менее, отображает программа Adobe.

Нижний колонтитул

Опять в соответствии со спецификацией PDF

7.5.5 Файловый трейлер

Трейлер PDF-файла позволяет читателю-корреспонденту быстро найти таблицу перекрестных ссылок и некоторые специальные объекты. Соответствующие читатели должны прочитать файл PDF с его конца. Последняя строка файла должна содержать только маркер конца файла, %%EOF.

Снова зрители Adobe принимают некоторые файлы, не соответствующие этому требованию; в соответствии с Adobe PDF

  1. Для просмотра Acrobat требуется, чтобы маркер %%EOF находился где-то в последних 1024 байтах файла.

Поскольку последняя строка вашего файла не %%EOF, это еще одно требование к действительным PDF-файлам, которые он не может выполнить...


По поводу вашей претензии:

Но когда я открываю файл любым читателем, его формат действительно pdf-a

Adobe Reader не проверяет, является ли файл действительным PDF/A, он только сообщает, каким файлом он является.

Другие вопросы по тегам