Спецификация является основным руководством.Вот что вам в конечном итоге придется сделать:
- Написать заголовок
- Создать объекты, определяющие содержимое
- Создать таблицу перекрестных ссылок
- Написать трейлер
Заголовок прост - он определяет, что файл PDF и версия.Типы данных объектов в PDF.Это включает в себя bool, число, строку, список / массив, словарь и поток.Объекты пишутся прямо или косвенно.Прямые объекты пишутся как есть.Косвенные объекты пишутся так:
<objid> <generation> obj <direct object> endobj
Например, я мог бы написать:
3 0 obj (This is a string within PDF.) endobj
И всякий раз, когда я хочу использовать эту строку в другом месте, я просто должен использовать косвенную ссылку, который определяется как:
<objid> <generation> R
, в этом случае я мог бы сослаться на мою строку как:
3 0 R
Чтобы быстро найти объект, существует таблица перекрестных ссылок, которая сообщаетгде объект определенного идентификатора и поколения находится в файле.
Таким образом, в дополнение к простой записи объектов в файл, вы должны отслеживать положение файла, где косвенные объектыбыли определены.
Все это выполнимо, но вы быстро обнаружите, что по мере написания этих файлов будет действительно сложно вносить изменения в выходной поток и поддерживать порядок в чистоте и порядке.,Что еще хуже, это сделали и другие люди, так что теперь в дикой природе есть куча мусорных PDF-файлов, с которыми Acrobat удается как-то справиться.Например, GhostScript (надеюсь, это исправлено) создавал PDF-файлы, таблицы перекрестных ссылок которых были полным мусором - они ни на что не указывали.Кроме того, есть производители, которые нарушают спецификацию, используя неверный тип данных для словарных статей или другие, у которых отсутствует информация, необходимая для спецификации.
Потреблять PDF довольно кошмарно.
Тем не менееЭто интересное упражнение, но если вы хотите сделать что-то существенное, вам нужно начать писать хорошие инструменты, которые управляют всеми косвенными ссылками для вас, таблицами перекрестных ссылок и словарями, проверкой типов и так далее, и так далее.В конце концов, вы обнаружите, что, возможно, существующая библиотека будет служить вам лучше.
И, будучи автором инструментов, которые используют и генерируют PDF, я буду умолять вас, чтобы вы не позволяли ни одной из вашихсовместимые PDF-файлы в дикую природу.