Все зависит от того, насколько хорошо / надежно вы хотите, чтобы обнаружение работало.
Вот мой выбор наиболее важных битов + фрагментов из официального определения длиной 756 страниц, прямо изо рта лошади ( PDF 32000: 1-2008 ):
Основной соответствующий PDF-файл должен состоять из следующих четырех элементов (см. Рисунок 2):
- однострочный заголовок, идентифицирующий версию спецификации PDF, которой соответствует файл
- Тело, содержащее объекты, составляющие документ, содержащийся в файле
- Таблица перекрестных ссылок, содержащая информацию о косвенных объектах в файле
- Трейлер с указанием местоположения таблицы перекрестных ссылок и некоторых специальных объектов в теле файла
[....]
Первая строка файла PDF должна быть заголовком, состоящим из 5 символов% PDF–, за которым следует номер версии формы 1.N, где N - это цифра от 0 до 7.
Соответствующий читатель должен принимать файлы с любым из следующих заголовков:
% PDF-1,0
% PDF-1,1
% PDF-1,2
% PDF-1,3
% PDF-1,4
% PDF-1,5
% PDF-1.6
% PDF-1,7
[...]
Если файл PDF содержит двоичные данные, как это делают большинство (см. 7.2, «Лексические соглашения»), за строкой заголовка должна немедленно следовать строка комментария, содержащая как минимум четыре двоичных символа, то есть символы с кодами 128 или больше Это обеспечивает правильное поведение приложений передачи файлов, которые проверяют данные в начале файла, чтобы определить, следует ли рассматривать содержимое файла как текст или как двоичный файл.
Прицеп
[....] Последняя строка файла должна содержать только маркер конца файла, %% EOF. Две предыдущие строки должны содержать, по одной на строку и по порядку, ключевое слово startxref и смещение байта в декодированном потоке от начала файла до начала ключевого слова xref в последнем разделе перекрестных ссылок.
Резюме
Две самые важные вещи, которые нужно помнить:
(a) Первая «строка заголовка»
%PDF-1.X
[где X в 0..7] должен появиться на отдельной строке, за которой следует новая строка. Эта строка должна появляться в первых 4096 байтах, необязательно в самой первой строке. Предыдущие строки могут содержать содержимое не в формате PDF, но команды для работы с принтером (PJL) или комментарии.
(b) Самая следующая строка должна содержать четыре двоичных байта, если PDF-файл содержит двоичные данные.
Просто синтаксический анализ '% PDF-1.' уже укусил много людей ....