Все статьи
24 сентября 2026 г.8 мин чтения

Как проверить флаг встраивания TTF перед передачей PDF

Как проверить флаг встраивания TTF перед передачей PDF

Флаг встраивания в таблице OS/2 сообщает приложению, какие способы использования встроенного шрифта допускает файл; он не заменяет лицензию, по которой вы получили право на гарнитуру. Перед отправкой PDF проверьте обе вещи: условия лицензии и значение fsType именно в том TTF, который попадёт в документ. Так вы заранее заметите запрет на встраивание и ограничения на редактирование или подмножество.

Почему это важно проверять в экспортированном файле

При сборке рукописного шрифта легко сосредоточиться на видимой части: контуры целы, нужные знаки набираются, имя отображается правильно. Но для передачи макета есть ещё один вопрос: позволит ли программа включить контуры гарнитуры в PDF и какие действия получатель сможет выполнять с документом. На этот сценарий влияет поле fsType таблицы OS/2 внутри файла OpenType или TrueType.

Значение считывается приложениями, которые поддерживают встраивание. Спецификация OpenType описывает режимы и дополнительные ограничения: например, можно запретить подмножество шрифта или разрешить вложение только растровых данных. Поэтому одинаково выглядящие экземпляры TTF могут вести себя по-разному при создании документа, если их таблица OS/2 различается.

Важное различие: fsType — технический сигнал для программ, а не самостоятельное юридическое разрешение. Если вы нарисовали шрифт сами, обычно именно вы определяете его условия использования и должны согласованно выбрать поле при экспорте. Если же файл куплен, получен от клиента или основан на сторонней гарнитуре, ориентируйтесь на лицензионные условия поставщика; изменение числа в таблице не расширяет эти права.

Четыре режима, которые стоит понимать

Нижние четыре бита поля fsType задают режим встраивания. Microsoft OpenType Specification описывает следующие варианты:

  • 0 — installable embedding: шрифт может встраиваться; условия передачи и использования всё равно следуют исходной лицензии.
  • 2 — restricted license: файл нельзя встраивать, изменять или обменивать без разрешения правообладателя.
  • 4 — preview & print: получатель может просматривать и печатать документ, но документ должен оставаться только для чтения.
  • 8 — editable: документ можно редактировать с использованием встроенного шрифта и сохранить изменения.

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

У поля есть дополнительные биты. Бит 8 (0x0100) означает, что нельзя встраивать подмножество: программа должна вложить полный шрифт. Бит 9 (0x0200) допускает только растровое встраивание; если в файле нет растровых данных, приложение может не суметь вложить шрифт. Эти условия применяются вместе с режимом, заданным младшими битами.

Сначала установите, какой файл попадёт в PDF

Проверяйте конечный экспорт, а не промежуточный проект или одноимённый экземпляр из системной папки. Сохраните его в отдельное место, задайте ясное имя вроде eskiz-final-03.ttf и запишите версию. Если экспортируете несколько форматов, отметьте, какой именно файл будет установлен в макет и использован при сохранении PDF.

Затем исключите путаницу с дубликатами. Закройте приложение вёрстки, временно переместите старые версии из тестовой папки и снова откройте финальный файл в выбранной программе. Флаг может различаться между TTF, OTF и экспортами разных дат, даже если отображаемое имя семейства одинаковое. В заголовке ОС/2 проверяйте конкретный файл по полному пути.

Сделайте копию конечного файла перед любым исправлением. Таблица OS/2 является частью бинарного шрифта; ручное редактирование без понимания сборки может повредить файл или привести к несогласованным данным. Для собственной гарнитуры исправьте настройки в исходном редакторе и экспортируйте новую версию, сохраняя старый файл для сравнения.

Как прочитать fsType с помощью FontTools

Для первичной проверки подойдёт FontTools, набор утилит с открытым исходным кодом. Команда ttx умеет выгружать выбранные таблицы шрифта в читаемый XML. Установите FontTools обычным для вашей системы способом, затем выполните в терминале команду, подставив полный путь к своему файлу: ttx -t OS/2 -o - /путь/к/eskiz-final-03.ttf.

В выводе найдите запись <fsType value="..."/>. FontTools показывает поле как 16-битную двоичную строку, сгруппированную пробелом: например, 00000000 00000100 соответствует 0x0004, то есть preview & print; 00000001 00000100 соответствует 0x0104 и дополнительно запрещает подмножество. Если формат кажется непривычным, прочитайте значение через Python и выведите hex(font['OS/2'].fsType), как описано ниже.

Если команда сообщает, что таблицу не удалось прочитать, проверьте путь, формат и то, что выбран именно TTF/OTF, а не архив или веб-файл. Справка FontTools объясняет ключ -t для выбора таблицы и -o - для печати результата в консоль. Можно также сохранить результат в отдельный файл, но не записывайте его поверх исходного шрифта.

Для программной проверки можно использовать небольшой скрипт на Python с библиотекой FontTools: откройте файл объектом TTFont, прочитайте font['OS/2'].fsType и напечатайте значение в формате hex(...). Если таблицы OS/2 нет либо библиотека выдаёт ошибку, считайте файл неподтверждённым и проверьте экспорт заново в редакторе шрифтов. Не меняйте флаг ради обхода предупреждения PDF-программы.

Как интерпретировать значение без догадок

Сначала отделите режим из младшей части числа: примените маску 0x000F. Получившиеся значения 0, 2, 4 или 8 соответствуют четырём описанным режимам. Затем отдельно проверьте биты 0x0100 и 0x0200. Например, 0x0004 разрешает только просмотр и печать, а 0x0104 добавляет требование встраивать полный файл без подмножества.

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

Значение 0 не означает «можно распространять шрифт как угодно». Оно описывает разрешённый режим встраивания согласно таблице, но получатель документа всё равно связан исходными условиями использования гарнитуры. Если автор шрифта — вы, запишите это решение в лицензионном файле проекта и не выдавайте технический флаг за договор или публичную лицензию.

Проверьте результат через PDF

Проверка поля отвечает только на вопрос о настройке файла шрифта. После создания PDF проверьте сам документ: покажите список использованных шрифтов в просмотрщике или инструменте проверки PDF и найдите свою гарнитуру. Названия вроде «Embedded» и «Embedded Subset» отражают, что программа включила полный файл или подмножество; надпись о подмножестве не является ошибкой, если флаг и лицензия допускают его.

Затем откройте копию PDF на компьютере, где ваш шрифт не установлен, или в изолированной пользовательской среде. Сверьте контрольную строку с русскими буквами, «Ё», цифрами и знаками, которые действительно есть в вашей гарнитуре. Проверьте не только внешний вид: если получателю нужно редактировать документ, попробуйте изменить текст и сохранить копию. Для режима preview & print приложение должно ограничивать редактирование; поведение зависит от того, как приложение реализует правила встраивания.

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

Практический чеклист перед отправкой

  • Зафиксируйте полный путь, имя и версию TTF/OTF, который использует макет.
  • Убедитесь, что таблица OS/2 читается и fsType получен именно из финального экспорта.
  • Сверьте разрешённый режим с условиями лицензии и задачей получателя.
  • Проверьте дополнительные биты: запрет на подмножество и ограничение растровым встраиванием.
  • Создайте PDF и проверьте список вложенных шрифтов и отображение контрольной строки.
  • Откройте документ без установленной гарнитуры; проверьте просмотр, печать и редактирование по ожидаемому режиму.
  • Передайте получателю PDF и понятное пояснение, если ему понадобится исходный шрифт или отдельная лицензия.

Ошибки, из-за которых проверка вводит в заблуждение

Первая ошибка — менять fsType прямо в экспортированном файле, чтобы программа позволила сохранить PDF. Спецификация требует, чтобы приложение сохраняло сведения о правах и ограничениях; изменение поля не создаёт права, которых не было. Вернитесь к условиям лицензии или настройкам собственного проекта.

Вторая — проверять только число, игнорируя дополнительные биты. 0x0104 и 0x0004 оба включают режим preview & print, но только первое значение содержит запрет на подмножество. Именно поэтому полезно записывать число целиком, а не только подпись режима в одном приложении.

Третья — делать вывод только по тому, что PDF выглядит правильно на своём компьютере. Установленная локально гарнитура может подменить встроенную, скрыть отсутствие символов или позволить редактирование, которое недоступно на другой машине. Откройте копию там, где шрифт отсутствует.

Четвёртая — путать технический статус встроенного шрифта с правом переслать TTF. Документ может содержать данные гарнитуры, но это не автоматически разрешает извлечь или отдельно распространять файл. Описывайте получателю только те права, которые действительно установлены лицензией.

Частые вопросы

Где находится флаг встраивания TTF?

Он хранится в поле fsType таблицы OS/2 шрифта OpenType или TrueType. Для чтения можно выгрузить таблицу через ttx -t OS/2 из FontTools или посмотреть поле в редакторе шрифтов. Проверяйте конечный экспорт, а не только проект.

Значение 0 запрещает встраивание?

Нет. В спецификации OpenType значение 0 означает installable embedding. Однако оно не отменяет условия лицензии, на основании которой шрифт получен, и не разрешает автоматически распространять исходный TTF отдельно.

Что означает значение 4?

Это режим Preview & Print: приложение может временно использовать шрифт для просмотра и печати документа, который должен открываться только для чтения. Сверьте реализацию целевой программы с её документацией и проверьте созданный PDF на отдельной машине.

Почему PDF содержит Embedded Subset?

Многие программы включают только использованные глифы, чтобы уменьшить размер документа. Такой результат приемлем лишь когда условия использования и поле fsType разрешают подмножество. Бит 0x0100 указывает, что подмножество создавать нельзя.

Можно ли исправить флаг после экспорта?

Для собственной гарнитуры безопаснее изменить настройку в редакторе и экспортировать новый файл, затем повторить проверку. Для стороннего шрифта не меняйте флаг в обход ограничений; уточните условия у правообладателя или выберите гарнитуру с подходящими правами.

Почему программа всё равно не встраивает разрешённый шрифт?

Флаг — лишь один сигнал. Проверьте, использует ли макет именно нужный экземпляр, поддерживает ли приложение формат и включено ли в нём встраивание при сохранении PDF. Повторите тест на коротком документе и изучите предупреждения программы.

Нужно ли передавать TTF вместе с PDF?

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

Итог

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