Структура файла pdf: PDF с точки зрения программиста / Хабр

PDF с точки зрения программиста / Хабр

Я имею дело с PDF не только как пользователь, а, прежде всего, как разработчик софта, умеющего его читать и писать (возможно, вы сталкивались с продуктами компании ABBYY, работающими с PDF – ABBYY FineReader, ABBYY PDF Transformer). Я предполагаю, что вы прочитали статью habrahabr.ru/company/abbyy/blog/105006 и далее пишу только про некоторые особенности и ограничения PDF, которые больше интересны продвинутым пользователям. Никаких сложных технических деталей при этом не буду касаться, так что программистам, желающим научиться читать или писать PDF, лучше сразу перейти к чтению спецификацию версии 1.7 со страницы www.adobe.com/devnet/pdf/pdf_reference_archive.html 🙂

Назначение и особенности PDF

Изначально формат PDF задумывался компанией Adobe ещё в конце 80х годов прошлого века как «электронная твёрдая копия» странично-структурированных документов, которую можно просматривать и печатать в виде, идентичном оригинальному, на разных машинах и платформах, но который не предполагается редактировать. Это определение отличает PDF от большинства других форматов хранения и распространения человеко-читаемых документов. За прошедшие годы PDF сильно эволюционировал, являясь в настоящее время контейнером для самого разнообразного контента (текст, векторная и растровая графика, интерактивные элементы, формы, аудио, видео, аннотации разных видов), но его исходное предназначение до сих пор остаётся источником как его возможностей, так и многочисленных ограничений.

Так, форматы текстовых документов (DOC, RTF, DOCX и т.д.) в основном ориентированы не на просмотр, а на редактирование документов. Созданный разумным пользователем 🙂 документ логично реагирует на вставку/замену/удаление текста, картинок, таблиц в разных местах, изменение размеров и полей страниц, изменение форматирования фрагментов текста любого размера и тому подобные действия. Интернет страницы в формате HTML не слишком ориентированы на редактирование (хотя и допускают его), но при условии прямых рук автора нормально переносят отображение не только на экране монитора своего создателя, но и на устройствах с совершенно другими экранами и взаимодействием с пользователем.

У PDF же особый путь – наибольшее распространение он получил как формат-паразит, в котором документы не создаются человеком «с нуля», а чаще всего порождаются из других форматов путём глубокой машинной переработки, теряющей многие или даже все детали, ненужные для отображения документа в фиксированном виде. Cамым распространенным способом получения PDF является печать на виртуальный PDF-принтер из любого приложения, имеющего в меню команду «Print».

PDF-принтер переводит GDI(«интерфейс графических устройств»)-команды вывода в нужные места символов, линий, кривых, прямоугольников, растровых изображений и прочих геометрических примитивов в соответствующие им PDF-команды с сохранением в файл. При этом, разумеется, сохраняются количество и размер страниц, на которое выполнялась печать.

Такое преобразование способно очень точно передать внешний вид того, что получилось, перед печатью (например, линии и символы не теряют своей чёткости при любом масштабировании и при этом хранятся достаточно компактно), но совершенно игнорирует устройство документа, из которого это получилось. Например, для подчёркивания слова или другого фрагмента текста в PDF не предусмотрено выделенной команды или атрибута символов – вместо этого отдельно выводятся символы (группами, которые обычно даже не совпадают со словами или строками), а отдельно рисуются линии или тоненькие прямоугольники нужной толщины и цвета в нужных местах страницы. Таблицы, которые человек воспринимает как целостный набор ячеек, для приложения, отображающего PDF, – просто хаотический набор символов и линий, по случайному совпадению образовавших нечто, воспринимаемое человеком как таблица. Гиперссылки, которые в исходном документе можно было использовать как для навигации внутри документа, так и для перехода на Веб-адреса, при печати исчезают как средство навигации, остаются лишь окрашенные и/или подчёркнутые надписи. В общем, сплошные имитация и надувательство. Такие PDF я ниже буду называть «векторными» (как состоящие из векторных команд, к которым относится и рисование символов).

Другой способ получения PDF-документов, ставший особенно популярным в последние годы, – переработка в него отсканированных бумажных страниц.

Сейчас большинство сканеров и многофункциональных устройств могут выдавать результат в виде «растровых» PDF – при этом предыдущий способ «имитации печати» не нужен, а драйвер или утилита устройства самостоятельно формирует страницы PDF так, чтобы на каждой из них оказалось нужное «растровое» изображение, благо набор форматов графики, которые можно использовать в PDF, покрывают большинство запросов. Такие «растровые» PDF-документы занимают больше места и выглядят менее качественными, чем «векторные».

Некоторые современные приложения (в том числе приложения комплекта OpenOffice, Microsoft Office новых версий, ABBYY FineReader и ABBYY PDF Transformer) умеют создавать PDF самостоятельно, пользуясь при этом гораздо большим арсеналом средств, чем PDF-принтеры, ибо знают об исходном документе гораздо больше, чем нужно передать принтеру. Это позволяет сохранить, например, гиперссылки как таковые (а не просто как окрашенный и/или подчёркнутый текст) или описать некоторые элементы структуры документа для его переформатирования и показа на экранах малых разрешений.

Такие документы со структурной информацией называются «тегированными» или «tagged» PDF. По замыслу Adobe, «тегирование», добавленное начиная с Acrobat 5, призвано скрыть наиболее вопиющие недостатки ранних версий PDF. Например, для нетегированных документов не гарантируется корректная работа механизма копирования фрагментов текста в буфер обмена Windows (всем привычный Copy-Paste). При этом даже сегодня тегированными являются не все создаваемые PDF, в том числе из-за ограниченных возможностей программ-генераторов (или незнания пользователями, где включить нужную для этого галочку в настройках), или просто из-за большего размера таких PDF, когда остро стоит вопрос экономии дискового пространства при хранении больших архивов.

Преобразование PDF-документов в другие форматы

Желание отредактировать содержимое PDF-документа или преобразовать его в другие, желательно редактируемые форматы (как для немедленного редактирования, так и для хранения с возможностью поиска/редактирования «когда-нибудь»), возникает по разным причинам. Простейшие средства извлечения текстового содержимого предоставляет любое приложение, отображающее PDF – я имею привычный Copy-Paste, который работает довольно примитивно – как правило, теряется символьное и абзацное форматирование, игнорируются таблицы и сложная вёрстка PDF-документа. Есть приложения, которые позволяют «точечно» редактировать PDF без преобразования в другие форматы – но их арсенал средств редактирования очень ограничен, ну просто никакого сравнения с привычными текстовыми процессорами 🙂 В дорогущем Adobe Acrobat для многих документов единственным работающим видом редактирования является «аннотирование» – есть инструменты для добавления комментариев, выделения текста маркером, зачёркивания и т.п. Да, более продвинутое редактирование как бы есть, но вы, случайно, не встречали забавного сообщения «All or part of the selection has no available system font. You cannot add or delete text using the currently selected font.» при невинной попытке удалить символ или слово из «хорошего», «векторного» PDF-документа в Акробате? А не пробовали заменить фрагмент строки на более длинный, грустно наблюдая уползающие вправо хвосты строк? Если нет, значит любовь к продуктам Adobe у вас ещё впереди! К простым и привычным для текстовых процессоров задачам – например, «заменить за несколько секунд по всему документу слово «MS» на «Microsoft», с изменением размещения текста по колонкам и страницам» – такое «редактирование» и близко не стоит.

Неслучайно в софтверной индустрии сформировалась целая отрасль, производящая средства конверсии с лучшей функциональностью. Из написанного выше (и особенно – ниже), должно стать понятно, насколько это непростая задача. Большинство пользователей, не читавших этого креатива, так не считают – поэтому я его и пишу 🙂

Основные проблемы при преобразовании PDF в другие форматы

Часто в обсуждении связанных с PDF вопросов употребляется понятие «текстового слоя». Интуитивно многими пользователями предполагается, что в PDF-файлах есть такие выделенные части, где логично и понятно описаны все нужные характеристики видимого текста – или невидимого, но находимого поиском или выделяемого мышью. Хочу открыть вам страшную тайну (вероятно, с риском в ближайшее время получить пулю от киллера, подосланного авторами формата PDF и их отделом маркетинга) – никакого текстового слоя в указанном смысле в PDF нет! На деле для каждой страницы есть общий поток команд её рисования, в котором совершенно произвольно перемешаны разнотипные команды – задания областей отсечения, смены текущих толщины, цвета и шаблона пунктирности линий, изменения системы координат, смены шрифта, рисования прямых и кривых (с текущими атрибутами), вывода группы символов с текущими атрибутами и указанными «номерами глифов» (глиф – описание изображение символа, без учёта других его характеристик), вывода растровых картинок и т.

п. То есть даже специальные текстовые команды – это просто один из многих инструментов рисования, не выделенный в отдельные потоки.

Хуже другое – даже в пределах одной страницы PDF можно использовать (слишком) широкий набор средств изображения похожего глазу текста: буквы могут быть видны как части растрового изображения – например, в логотипах (задача их распознавания – в чистом виде задача OCR-приложений, того же ABBYY FineReader), как результат рисования кривыми Безье или специальными текстовыми командами. Этот последний случай – самый лучший для обработки, но даже здесь не обязательно указываются общепринятые коды символов из Unicode или других кодировок – ибо в PDF-файл можно записывать особые шрифты из подмножества только реально использованных символов и ссылаться на символы по совершенно условным «номерам глифов», а не по кодам. То есть не всегда просто как обнаружить символы в нужном месте, так и определить их коды! С форматированием, в том числе с выбором похожего шрифта при отсутствии точного аналога, всё ещё хитрее.

Символы, даже если их присутствие и коды тем или иным способом установлены, своим порядком вывода на страницу очень часто никак не соответствуют исходной последовательности их размещения и чтения на странице. Например, на двухколоночной странице команды вывода текста из правой и левой колонок могут быть произвольно перемешаны. На такой странице нужно выделить области, в каждой из которых размещён логически связный текст – это тоже задача, много лет решаемая OCR-приложениями. Некоторую помощь даёт структурная информация из тегированных PDF – но часто даже у сделанных сейчас PDF эта информация либо отсутствует – как при выводе через PDF-принтер – либо бывает недостаточно полна.

Когда мы решили, что в некоторых местах страницы есть связный текст (а где-то даже поняли, как он сгруппирован в таблицы – это очень нетривиальная задача!), и нашли, какие символы и в какие строчки складываются, нужно преобразовать эти строчки в абзацы и более высокоуровневые элементы, привычные пользователям как текстовых процессоров, так и HTML – колонки, таблицы, врезки. Данных об абзацном форматировании в PDF обычно нет, так что все эти характеристики тоже нужно вычислять – как при всём том же распознавании. Если пытаться игнорировать элементы текста сложнее строчек или абзацев, то, выведя всё в коротких врезках, получим документ, который выглядит как настоящий, но почти не редактируется – помните задачу о замене по всему документу слова «MS» на «Microsoft»? Это очень хороший тест на редактируемость. Для редактируемого документа важна способность текста перетекать из одних зон в другие – в нужных случаях, которые ещё надо суметь отличить от ненужных.

Только проделав всё это, можно превратить содержимое PDF в файл редактируемого формата, выглядящий похоже на оригинал и удобный для работы. Конечно, за многие годы многие умные люди в разных компаниях научились решать каждую из этих задач хорошо или даже отлично, но идеального решения всей задачи в целом я ещё не встречал. Но мы над этим работаем 🙂

Вячеслав Сапроненко SlaSapro
Департамент продуктов для распознавания текстов

Обзор формата Adobe PDF

Формат переносимых документов (PDF) представляет собой универсальный файловый формат, который позволяет сохранить шрифты, изображения и сам макет исходного документа независимо от того, на какой из множества платформ и в каком из множества приложений такой документ создавался. Формат Adobe PDF считается признанным общемировым стандартом в области тиражирования и обмена надежно защищенными электронными документами и бланками. Файлы Adobe PDF имеют небольшой размер, и они самодостаточны; они допускают совместную работу, просмотр и печать с помощью бесплатной программы Adobe Reader®.

Отлично себя оправдывает использование формата Adobe PDF в издательском и печатном деле. Благодаря способности Adobe PDF сохранять совмещенный (композитный) макет, можно создавать компактные и надежные файлы, которые сотрудники типографии могут просматривать, редактировать, сортировать и получать с них пробные оттиски. Также в предусмотренный техпроцессом момент в типографии могут как непосредственно отправить файл на фотонаборное устройство, так и продолжить его завершающую обработку: осуществить предпечатные проверки, провести треппинг, спустить полосы или выполнить цветоделение.

Сохраняя документ в формате PDF, можно создать файл, соответствующий стандарту PDF/X. Формат PDF/X (формат обмена переносимыми документами) является разновидностью Adobe PDF, которая не допускает использования многих вариантов и сочетаний данных о цветности, шрифтов и треппинга, которые могут вызвать осложнения при печати. Документ PDF/X следует создавать в случае, когда PDF-файлы используются как цифровые оригиналы при допечатной подготовке изданий — как на этапе создания макета, так и для целей фотовывода (если программное обеспечение и выводящие устройства способны работать с форматом PDF/X).

Формат PDF может помочь при следующих затруднениях, обычно возникающих в работе с электронными документами.

Обычное затруднение

Чем полезен Adobe PDF

Присланный файл невозможно открыть, поскольку у получателя отсутствует приложение, в котором он был создан.

Где бы пользователь ни находился, он всегда сможет открыть документ PDF. Для этого достаточно иметь бесплатную программу Adobe Reader.

В архиве, который содержит электронные и бумажные документы, сложно найти нужный документ, а сам архив занимает немало места и требует наличия приложения, в котором документ был создан.

Документы PDF компактны и удобны для поиска; для их чтения достаточно иметь приложение Reader. Наличие ссылок облегчает навигацию внутри документа PDF.

Документы отображаются в карманных устройствах с искажениями.

Расстановка тегов позволяет перекомпоновать текст документа PDF специально для возможности открывать такие файлы на мобильных платформах, таких, как Palm OS®, Symbian™ или Pocket PC®.

Документы со сложным форматированием недоступны людям с плохим зрением.

Документы PDF с гипертекстовой разметкой содержат сведения о информационном наполнении и структуре, благодаря чему они отлично обрабатываются программами и устройствами для чтения с экрана.

InCopy встраивает шрифт только в том случае, если он содержит заданный поставщиком параметр, разрешающий встраивание. Встраивание предотвращает подстановку шрифта при просмотре или печати файла, благодаря чему читатель видит текст, набранный исходной гарнитурой. Увеличение файла вследствие встраивания шрифтов незначительно, если в документе не используются CID-шрифты (с многобайтовыми идентификаторами символов), обычно применяемые для азиатских языков, в которых один глиф создается на основе нескольких символов.

Для каждого шрифта InCopy может встроить шрифт целиком или только его подмножество — конкретные символы, называемые глифами, которые использованы в этом файле. Сокращение знакового состава, при котором формируется уникальное имя шрифта, позволяет при печати использовать первоначальный шрифт и его метрику. Встраивание подмножества шрифта влияет на размер файла и на возможность последующего редактирования файла.

Если InCopy не может встроить шрифт, вместо него временно подставляется одна из гарнитур Multiple Master — AdobeSerMM для отсутствующего шрифта с засечками либо AdobeSanMM для шрифта без засечек.

Эти гарнитуры шрифта допускают растяжение или сжатие, что позволяет сохранить разбиение на строки и разрыв страницы исходного документа. При подстановке не всегда удается воспроизвести форму с исходными буквами, особенно если программа сталкивается с нестандартной, например рукописной, гарнитурой шрифта.

Если использована нестандартная гарнитура (слева), символы шрифта, использованного для подстановки, не всегда похожи (справа).

При экспорте в формат Adobe PDF приложение InCopy автоматически снижает разрешение изображений, обрезает изображения по их рамке и сжимает текст и векторную графику при помощи алгоритма сжатия без потерь ZIP. Этот алгоритм хорошо подходит для изображений с большими одноцветными областями или повторяющимся узором, а также для черно-белых изображений с повторяющимся узором. Поскольку InCopy использует алгоритм сжатия без потерь ZIP, при уменьшении размера файла данные не удаляются, поэтому качество изображения не затрагивается.

Связанные материалы

  • Экспорт в формат Adobe PDF

Вход в учетную запись

Войти

Управление учетной записью

Внутренняя структура файла PDF

Заданный вопрос

Изменено 6 лет, 8 месяцев назад

Просмотрено 2к раз

Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.

Я изучаю структуру файла PDF. Как я могу определить такую ​​информацию, как размер бумаги, размеры полей и шрифта из файла PDF? Я знаю, что F13 для Helvetica, но как насчет других шрифтов? Я не могу найти их даже в Adobe doc о PDF.

Я изучаю структуру файла PDF.

Используйте спецификацию PDF ISO 32000-1.

Как определить такую ​​информацию, как размер бумаги,

Каждая страница имеет свой размер, он определяется в Page словаре или наследуется:

MediaBox прямоугольник (Обязательный; наследуемый) Прямоугольник (см. 7.9.5, «Прямоугольники»), выражается в единицах пользовательского пространства по умолчанию, которые должны определять границы физического носителя, на котором должна быть страница отображается или печатается (см. 14.11.2, «Границы страниц»).

CropBox прямоугольник (необязательно; наследуется) Прямоугольник, выраженный в пользовательском пространстве по умолчанию единиц, которые должны определять видимую область пользовательского пространства по умолчанию. Когда страница отображается или распечатывается, ее содержимое должно быть обрезано. (обрезается) до этого прямоугольника и затем накладывается на вывод среде некоторым образом, определяемым реализацией (см. 14.11.2, «Границы страницы»). Значение по умолчанию: значение MediaBox.

(Таблица 30 – Записи в объекте страницы)

поля

Маржа отсутствует, если вы не имеете в виду маржу, подразумеваемую некоторыми из приведенных выше полей.

и размеры шрифта из файла PDF?

Размер, при котором шрифт используется для рисования некоторого текста, определяется в потоке содержимого командой Tf и преобразуется текущей матрицей преобразования и текстовой матрицей.

размер шрифта Tf Установить шрифт текста, T f , до шрифт и размер шрифта текста, T fs , до размер . шрифт должен быть имя ресурса шрифта в подкаталоге Font текущего словарь ресурсов; размер должен быть числом, представляющим масштабный коэффициент. Нет начального значения ни для шрифта , ни для размера ; они должны быть указаны явно, используя Tf перед отображением любого текста.

(Таблица 105 – Операторы текстового состояния)

Кроме того,

Я знаю, что F13 для Helvetica,

Может быть одна страница PDF, для которой это так, но для следующей это может быть F2 , Helv , ASDFjklgfklöjsflaksfd или что угодно

4

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

4.

Структура документа — объяснение PDF [Книга]

Глава 4. Структура документа

В этой главе мы оставляем биты и байты файла PDF, и рассмотрим логическую структуру. Рассматриваем прицеп словарь , каталог документов и дерево страниц . Перечислим необходимые записи в каждом объект. Затем мы рассмотрим две общие структуры в файлах PDF: текста строки и даты .

На рис. 4-1 показана логическая структура типового документа.

Рис. 4-1. Типичная структура двухстраничного PDF-документа

Trailer Dictionary

Этот словарь, находящийся в трейлере файла, а не в основном тело файла, является одной из первых вещей, которые должны быть обработаны, когда программа хочет прочитать документ PDF. Он содержит записи, позволяющие таблицу перекрестных ссылок — и, следовательно, объекты файла — для чтения. Его важные записи сведены в Таблицу 4-1.

Таблица 4-1. Entries in a trailer dictionary (*denotes required entry)

Key Value type Value
/Size * Integer Total number of entries in таблица перекрестных ссылок файла (обычно равно количеству объектов в файле плюс один).
/Root * Косвенная ссылка на словарь Каталог документов .
/Информация Косвенная ссылка на словарь Документ Информация о документе словарь .
/ID Массив из двух строк Уникально идентифицирует файл в рабочем процессе. Первый строка определяется, когда файл сначала создается, второй изменены системами рабочего процесса, когда они изменяют файл.

Вот пример словаря трейлера:

 <<
   /Размер 421
   /Корень 377 0 Р
   /Информация 375 0 Р
   /ID [<75ff22189ceac848dfa2afec93deee03> <057928614d9711db835e000d937095a2>]
>> 

После обработки словаря трейлера мы можем перейти к чтению словарь информации о документе и каталог документов .

Информационный словарь документов

Информационный словарь документов содержит даты создания и изменения файла, а также некоторые простые метаданные (не путать с более полными метаданными XMP). обсуждается в метаданных XML).

Записи словаря информации о документе описаны в таблице 4-2. Типичный словарь информации о документе приведено в Примере 4-1.

Таблица 4-2. Записи в словаре информации о документе. Типы «текст строка» и «строка даты» объясняются далее в этой главе.

Ключ Тип значения Значение
/Название текстовая строка Название документа. Обратите внимание, что это не имеет ничего общего с любой заголовок, отображаемый на первой странице.
/Тема текстовая строка Тема документа. Опять же, это просто метаданные без особых правил о содержании.
/Ключевые слова текстовая строка Ключевые слова, связанные с этим документом. Советов не дают как их структурировать.
/Автор текстовая строка Имя автора документа.
/Дата создания строка даты Дата создания документа.
/ModDate строка даты Дата последнего изменения документа.
/Создатель текстовая строка Имя программы, которая первоначально создала это документ, если он начинался как другой формат (например, «Microsoft Word»).
/Производитель текстовая строка Имя программы, конвертировавшей этот файл в PDF, если он начинался как другой формат (например, формат слова процессор).

Пример 4-1. Типовой информационный словарь документов

 <<
   /ModDate (D:20060926213913+02'00')
   /CreationDate (D:20060926213913+02'00')
   /Название (catalogueproduit-UK.qxd)
   /Creator (QuarkXPress: фильтр pictwpstops 1.0)
   /Producer (Acrobat Distiller 6.0 для Macintosh)
   /Автор (Джеймс Смит)
>> 

Формат строки даты (для /CreationDate и /ModDate ) обсуждается в разделе Даты. Формат текстовой строки (который описывает, как различные кодировки могут использоваться в строковом типе) описано в текстовых строках.

Каталог документов

Каталог документов является корневым объектом основной граф объектов, из которого все другие объекты могут быть достигнуты через косвенные ссылки. В Таблице 4-3 мы перечисляем словарные статьи каталога документов, которые требуются, и некоторые из много необязательных, чтобы представить краткие темы PDF, которые мы не охватываем в другом месте на этих страницах.

Таблица 4-3. The document catalog (*denotes required entry)

Key Value type Value
/Type * name Must be /Catalog .
/страниц * косвенная ссылка на словарь Корневой узел дерева страниц. Деревья страниц обсуждаются в Страницы и деревья страниц.
/PageLabels Числовое дерево Числовое дерево, задающее метки страниц для этого документа. Этот механизм позволяет страницам в документе иметь больше сложная нумерация, чем просто 1,2,3…. Например, предисловие книги могут быть пронумерованы i,ii,iii…, в то время как основное содержание начинается снова с 1,2,3… Эти метки страниц отображаются в PDF зрители — они не имеют ничего общего с печатной продукцией.
/Имена словарь Словарь имен. Это содержит различные имена деревья , которые сопоставляют имена объектам, чтобы предотвратить использовать номера объектов для прямой ссылки на них.
/Назначения словарь Словарь, сопоставляющий имена адресатам. Пункт назначения представляет собой описание места в документе PDF, к которому гиперссылка отправляет пользователя.
/ViewerPreferences словарь словарь предпочтений зрителя , который позволяет флагам определять поведение средства просмотра PDF, когда документ просматривается на экране, например страница, на которой он открыт, начальный масштаб просмотра и так далее.
/PageLayout имя Указывает макет страницы, используемый средствами просмотра PDF. Ценности /SinglePage , /OneColumn , /TwoColumnLeft , /TwoColumnRight , /TwoPageLeft , /TwoPageRight . (По умолчанию: /Одностраничный ). Подробности в таблице 28 ИСО 32000-1:2008.
/Пейджмоде имя Указывает режим страницы, который будет использоваться средствами просмотра PDF. Ценности являются /UseNone , /UseOutlines , /UseThumbs , /полноэкранный , /UseOC , /Использование вложений . (По умолчанию: /UseNone ). Подробности в Таблице 28 ИСО 32000-1:2008.
/Контуры косвенная ссылка на словарь Структурный словарь является корнем схема документа , широко известная как закладки.
/ Метаданные косвенная ссылка на stream Метаданные XMP документа — см. Метаданные XML.

Страницы и деревья страниц

Дерево страниц , построенное из словарей страниц, приносит вместе инструкции по рисованию графического и текстового контента (который мы рассмотрим в главе 5 и главе 6) с ресурсами (шрифты, изображения и другие внешние данные), которые используются этими инструкциями. Он также включает в себя размер страницы вместе с рядом других коробки определение кадрирования и так далее.

Записи в словаре страниц сведены в Таблицу 4-4.

Таблица 4-4. Entries in a page dictionary (*denotes required entry)

Key Value type Value
/Type * name Must be /Page .
/ Родительский * косвенная ссылка на словарь Родительский узел данного узла в дереве страниц.
/Ресурсы словарь Ресурсы страницы (шрифты, изображения и т. д.). Если это запись полностью опущена, ресурсы наследуются от родительский узел в дереве страниц. Если ресурсов действительно нет, включите эту запись, но используйте пустой словарь.
/Содержание косвенная ссылка на поток или массив таких references Графическое содержимое страницы в одном или нескольких разделах. Если эта запись отсутствует, страница пуста.
/Повернуть целое число Поворот страницы при просмотре в градусах по часовой стрелке от к северу. Значение должно быть кратно 90. Значение по умолчанию: 0. Это относится как к просмотру, так и к печати. Если эта запись отсутствует, его значение наследуется от его родительского узла на странице дерево.
/MediaBox * прямоугольник Медиабокс страницы (размер ее носитель, например, бумага). Для большинства целей размер страницы. Если это запись отсутствует, она унаследована от своего родительского узла на странице дерево.
/CropBox прямоугольник Поле обрезки страницы. Это определяет область страницы отображается по умолчанию при отображении или печати страницы. Если отсутствует, его значение определено таким же, как поле мультимедиа.

Структура данных прямоугольник для медиа-блок и другие блоки представляют собой массив из четырех числа. Они определяют диагонально противоположные углы прямоугольника. первые два элемента массива x и y координаты одного угла, двух последних элементов быть таковыми другого. Обычно левый нижний и правый верхний углы даны. Так, например:

 /MediaBox [0 0 500 800]
/CropBox [100 100 400 700] 

определяет страницу размером 500 на 800 точек с рамкой обрезки, удаляющей 100 точек с каждой стороны страницы.

Страницы связаны друг с другом с помощью страницы дерево , а не простой массив. Такая древовидная структура делает его быстрее найти нужную страницу в документе с сотнями или тысячами страницы. Хорошие приложения PDF строят сбалансированное дерево (один с минимальной высотой по количеству узлов). Это гарантирует, что конкретная страница может быть найдена быстро. Узлы без потомков сами страницы. Показан пример структуры дерева страниц для семи страниц. на Рисунке 4-2.

Это будет записано в объектах PDF, как показано в примере 4-2. Записи в промежуточном или корневом узел дерева страниц (т. е. не сама страница) сведены в Табл. 4-5.

Рис. 4-2. Дерево страниц на семь страниц. Точная форма дерева осталась в отдельное приложение PDF. Показан код PDF для этого дерева в примере 4-2.

Пример 4-2. Объекты PDF, используемые для построения дерева страниц, показанного на рисунке 4-2

 1 0 obj  Корневой узел 
<< /Тип /Страницы /Детские [2 0 R 3 0 R 4 0 R] /Количество 7 >>
эндообъект
2 0 obj  Промежуточный узел 
<< /Тип /Страницы /Дети [5 0 R 6 0 R 7 0 R] /Родитель 1 0 R /Количество 3 >>
эндообъект
3 0 obj  Промежуточный узел 
<< /Тип /Страницы /Дети [8 0 R 9 0 R 10 0 R] /Родитель 1 0 R /Количество 3 >>
эндообъект
4 0 обж  Страница 7 
<< /Type /Page /Parent 1 0 R /MediaBox [0 0 500 500] /Resources << >> >>
эндообъект
5 0 обж  Страница 1 
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 500 500] /Resources << >> >>
эндообъект
6 0 объект  Страница 2 
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 500 500] /Resources << >> >>
эндообъект
7 0 обж  Страница 3 
<< /Type /Page /Parent 2 0 R /MediaBox [0 0 500 500] /Resources << >> >>
эндообъект
8 0 обж  Страница 4 
<< /Type /Page /Parent 3 0 R /MediaBox [0 0 500 500] /Resources << >> >>
эндообъект
9 0 обж  Страница 5 
<< /Type /Page /Parent 3 0 R /MediaBox [0 0 500 500] /Resources << >> >>
эндообъект
10 0 объект  Страница 6 
<< /Type /Page /Parent 3 0 R /MediaBox [0 0 500 500] /Resources << >> >>
endobj 

Таблица 4-5. Записи в промежуточном или корневом узле дерева страниц (* обозначает required entry)

Key Value type Value
/Type * name Must be /Pages .
/Дети * массив косвенных ссылок Непосредственные дочерние узлы дерева страниц данного узла.
/Count * целое число Количество узлов страницы (не других узлов дерева страниц), которые являются возможными дочерними элементами этого узла.
/ Родительский косвенная ссылка на узел дерева страниц Ссылка на родителя этого узла (узел которого это ребенок). Должен присутствовать, если не является корневым узлом страницы дерево.

В этом дереве на любую страницу можно найти не более двух косвенных ссылок вдали от корневого узла.

Текстовые строки

Строки вне фактического текстового содержимого страницы (например, имена закладок, информация о документе и т. д.) известны как текст . строки . Они кодируются с использованием либо PDFDocEncoding или (в более поздних документах) Юникод. PDFDocEncoding основан на кодировке ISO Latin-1. это полностью задокументировано в Приложении D стандарта ISO 32000-1:2008.

Текстовые строки, закодированные как Unicode, отличаются глядя на первые два байта: это будет 254, за которым следует 255. Это маркер порядка байтов Unicode U+FEFF, который указывает UTF16BE кодирование. Это означает, что строка PDFDocEncoding не может начинаться с þ (254). следует ÿ (255), но это вряд ли произойдет в любом разумном случае. обстоятельство.

Даты создания и модификации /CreationDate и /ModDate в словаре информации о документе являются примерами формата даты PDF, который кодирует дату в строке, включая информацию о часовом поясе.

Строка даты имеет формат:

 (ГГГГММДДЧЧммССОНЧ'мм') 

, где скобки, как обычно, обозначают строку. Другие части даты приведены в Таблице 4-6.

Таблица 4-6. Составляющие формата даты PDF

Часть Значение
ГГГГ Год, состоящий из четырех цифр, например, 2008 .
ММ Месяц двумя цифрами от 01 до 12 .
ДД День, двумя цифрами от 01 до 31 .
ЧЧ Час, двумя цифрами от 00 до 23 .
мм Минуты, две цифры от 00 до 59 .
нержавеющая сталь Второй, двумя цифрами от 00 до 59 .
О Отношение местного времени к универсальному времени, либо +, - или Z . + означает, что местное время позже, чем UT, - раньше, а Z равно всемирному времени.
ЧХ' Абсолютное значение смещения от универсального времени в часов, двумя цифрами от 00 до 23 .
мм' Абсолютное значение смещения от универсального времени в минут, двумя цифрами от 00 до 59 .

Все части даты после года являются необязательными. Например, (D:1999) вполне допустимо. Очевидно, хотя, если вы опустите одну часть, вы должны опустить и все последующее, иначе результат был бы неоднозначным. Значения по умолчанию для DD и MM равен 01, для всех остальных частей по умолчанию используются нули.

Например:

 (D:20060926213913+02'00') 

означает 26 сентября 2006 г. в 9 часов.:39:13 вечера, во втором часовом поясе часов опережает всемирное время.

Собираем вместе

Это текст, созданный вручную, который необходимо преобразовать в действительный PDF-файл. файл по pdftk с использованием метода представлена ​​в главе 2. Это трехстраничный документ, со словарем информации о документе и деревом страниц. На рис. 4-3 показан этот документ, отображаемый в Acrobat. Читатель. Рисунок 4-4 – соответствующий объект график.

Пример 4–3. Трехстраничный документ с информацией о документе словарь

 %PDF-1. 1  Заголовок  1 0 obj  Верхний уровень дерева страниц: имеет двух дочерних элементов — первую страницу и промежуточный узел дерева страниц  << /Дети [2 0 R 3 0 R] /Тип /Страницы /Количество 3 >>
эндообъект
4 0 obj  Поток содержимого первой страницы  << >>
ручей
1. 0.000000 0.000000 1. 50. 770. см BT /F0 36. Tf (Page One) Tj ET
конечный поток
эндообъект
2 0 obj  Первая страница  <<
 /Повернуть 0
 /Родитель 1 0 Р
 /Ресурсы
 << /Font << /F0 << /BaseFont /Times-Italic /Subtype /Type1 /Type /Font >> >> >>
 /MediaBox [0,000000 0,000000 595,2755 841,88976378]
 /Тип /Страница
 /Содержание [4 0 Р]
>>
эндообъект
5 0 obj  Каталог документов  << /PageLayout /TwoColumnLeft /Pages 1 0 R /Type /Catalog >>
эндообъект
6 0 obj  Третья страница  <<
 /Повернуть 0
 /Родитель 3 0 Р
 /Ресурсы
 << /Font << /F0 << /BaseFont /Times-Italic /Subtype /Type1 /Type /Font >> >> >>
 /MediaBox [0,000000 0,000000 595,2755 841,88976378]
 /Тип /Страница
 /Содержание [7 0 Р]
>>
эндообъект
3 0 объект  Промежуточный узел дерева страниц, ссылающийся на вторую и третью страницы  << /Родитель 1 0 R /Дети [8 0 R 6 0 R] /Количество 2 /Тип /Страницы >>
эндообъект
8 0 obj  Вторая страница  <<
 /Повернуть на 270
 /Родитель 3 0 Р
 /Ресурсы
 << /Font << /F0 << /BaseFont /Times-Italic /Subtype /Type1 /Type /Font >> >> >>
 /MediaBox [0,000000 0,000000 595,2755 841,88976378]
 /Тип /Страница
 /Содержание [9 0 Р]
>>
эндообъект
9 0 obj  Поток контента для второй страницы  << >>
ручей
q 1.
Опубликовано в категории: Разное

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *