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

Контрольная сумма TTF не совпадает: как проверить экспорт

Контрольная сумма TTF не совпадает: как проверить экспорт

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

Что проверяет контрольная сумма шрифта

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

Табличная сумма — не криптографическая подпись и не доказательство авторства. Она не подтверждает лицензию, безопасность загрузки или визуальное качество букв. Это техническая проверка согласованности данных внутри шрифта. Для сравнения двух одинаковых копий файла можно использовать криптографический хэш, например SHA-256; это другая задача: он показывает, совпадают ли копии байт в байт, а не является частью обычной таблицы OpenType.

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

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

Почему расхождение появляется после экспорта

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

У шрифта могут быть и ошибки другого класса. Например, инструмент может разобрать файл, но сообщить о проблеме с контуром, таблицей метрик или сопоставлением символов. Ошибка проверки контрольной суммы не равна диагнозу каждой такой проблемы. Сначала зафиксируйте буквальный текст предупреждения и имя таблицы, если оно указано. Это поможет не менять всё подряд из-за одной строки лога.

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

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

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

Пошаговая диагностика

1. Сохраните исходник и обе копии файла

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

2. Убедитесь, что проверяете нужный файл

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

Если файл передавали через мессенджер, облако или архив, сравните исходный и полученный варианты. Когда они должны быть идентичными, одинаковый SHA-256 означает, что содержимое копий совпадает байт в байт. Разный хэш показывает, что в пути передачи или упаковки есть изменение; одинаковый хэш при предупреждении контрольной суммы означает, что передана та же самая копия и ошибку нужно искать в моменте создания или в интерпретации валидатора.

3. Запустите проверку, которая понимает OpenType

Откройте файл в программе проверки шрифтов, которая умеет читать его фактический формат. Для технической проверки можно использовать библиотеку FontTools: в её TTFont предусмотрен параметр checkChecksums; значение 2 вызывает исключение при обнаружении неверной контрольной суммы. В простом сценарии на Python проверка выглядит так:

from fontTools.ttLib import TTFont

with TTFont("my-font.ttf", checkChecksums=2) as font:
    print("Таблицы прочитаны без ошибки контрольной суммы")

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

4. Сопоставьте результат с копией из исходного редактора

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

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

5. Проверьте итоговую сборку в рабочей программе

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

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

Чего не следует делать

  • **Не менять поле checkSumAdjustment вручную.** Оно вычисляется относительно всего содержимого файла; исправление одного числа при неизменённых ошибочных данных проблему не решает.
  • **Не удалять таблицу, на которую указал валидатор.** Предупреждение о сумме говорит о несоответствии, а не о ненужности этой таблицы.
  • **Не переименовывать расширение.** Имя файла не пересобирает структуру OpenType.
  • **Не конвертировать перед диагностикой.** Сначала сохраните первичный экспорт и отчёт, иначе вы добавите ещё один этап изменений.
  • **Не смешивать хэш копии и внутреннюю сумму OpenType.** SHA-256 сравнивает две копии, а контрольные суммы таблиц проверяются по правилам формата.
  • **Не устанавливать сомнительный файл ради теста.** Для проверки целостности достаточно валидатора или редактора; установка не нужна.

Контрольный список перед передачей

  • Исходный проект и нетронутый экспорт сохранены отдельно.
  • Проверка выполнялась на файле с нужным расширением и точным именем.
  • Если файл пересылали, исходная и полученная копии сравнены по SHA-256.
  • В отчёте записаны ошибка, название таблицы и использованный инструмент.
  • Новый экспорт заново прошёл ту же проверку.
  • В предпросмотре открываются контуры и тестовые символы.
  • В пакет положена именно последняя проверенная копия.

Часто задаваемые вопросы

Что означает предупреждение о неверной контрольной сумме TTF?

Оно означает, что значение, записанное для данных шрифта или его таблицы, не совпало с расчётом проверяющей программы. Это не говорит автоматически, что испорчены контуры или отсутствуют буквы. Зафиксируйте имя таблицы и повторите экспорт из исходного проекта.

Может ли шрифт выглядеть нормально, но не пройти проверку суммы?

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

Исправляет ли переименование TTF в OTF ошибку контрольной суммы?

Нет. Переименование меняет только имя файла, но не содержимое. TTF и OTF могут использовать разные типы контуров внутри формата OpenType, поэтому переименованный файл сохраняет прежнюю структуру и прежние ошибки.

Зачем сравнивать SHA-256, если есть контрольные суммы OpenType?

SHA-256 полезен для проверки, что файл после отправки совпадает с исходной копией байт в байт. Контрольные суммы OpenType помогают проверить структуру таблиц по требованиям формата. Один тест отвечает на вопрос о передаче, другой — о целостности данных шрифта.

Нужно ли проверять `.ttc` так же, как обычный `.ttf`?

Не обязательно. TrueType Collection содержит несколько шрифтов в одном файле и допускает общие данные; отдельные поля контрольных сумм для компонента коллекции трактуются иначе. Используйте инструмент, который понимает TTC, и следуйте его диагностике для всего контейнера.

Если проверка прошла, шрифт полностью готов?

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

Итог

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