Pro редакция
Инструменты шрифтов
Краткий обзор
Заголовок раздела «Краткий обзор»NextPDF Pro анализирует встроенные программы шрифтов, определяет шрифты-подмножества по их стандартному соглашению об именовании и формирует структурированный план расширения подмножеств с оценкой влияния на размер.
Доступность и лицензирование
Заголовок раздела «Доступность и лицензирование»Эта возможность поставляется в составе NextPDF Pro (nextpdf/pro) и активируется лицензионным конвертом уровня Pro. Развёртывание без этого права не загружает классы данной возможности. Сравните редакции и получите лицензию.
Этот модуль не ограничивается отдельным флагом лицензии для каждой возможности. Классы Font Tools доступны всегда, когда установлен nextpdf/pro.
Установка
Заголовок раздела «Установка»composer require nextpdf/pro:^3Концептуальный обзор
Заголовок раздела «Концептуальный обзор»Шрифты-подмножества в PDF встраивают только те глифы, которые использует документ. По соглашению их имя /BaseFont несёт шестибуквенный тег в верхнем регистре, за которым следует +, например ABCDEF+Arial. NextPDF Pro:
- Обнаруживает подмножества.
FontDesubsetterсканирует исходные данные PDF на записи/BaseFont, распознаёт шаблон префикса подмножества и сообщает о каждой записи как об объекте-значенииSubsetInfoс исходным именем семейства, числом глифов подмножества, полным числом глифов и кодировкой. - Планирует расширение подмножеств.
DesubsetPlanсобирает шрифты-подмножества, намеченные к замене полными программами шрифтов, и сообщает оценочное увеличение размера в байтах, чтобы вы могли решить, стоит ли расширение подмножества затрат на размер файла, прежде чем действовать.
Font Tools — это слой анализа и планирования. Он описывает, что присутствует и во что обойдётся расширение подмножеств; он сам не переписывает программу шрифта.
Почему это работает именно так
Заголовок раздела «Почему это работает именно так»Переписывание встроенной программы шрифта — это сложная и рискованная часть. Контуры глифов, хинтинг и таблицы cmap должны оставаться согласованными, и одна ошибка портит отображение. Поэтому NextPDF Pro отделяет дешёвую и безопасную работу — инвентаризацию и прогноз затрат — от этого дорогостоящего переписывания. Сканер читает только байты; он никогда не разбирает и не выполняет программу шрифта, поэтому остаётся детерминированным и без побочных эффектов. Число глифов и разница в размере намеренно помечены как эвристики, чтобы оценка ёмкости оставалась честной, а не полагалась на число, которое модуль не может измерить. Это позволяет вам взвесить, стоит ли расширение подмножеств затрат, прежде чем искать полные программы шрифтов.
Проектные предпосылки: Шрифты: сложная часть.
Поверхность API
Заголовок раздела «Поверхность API»| Класс | Назначение |
|---|---|
FontDesubsetter | Сканировать данные PDF и сообщать о записях шрифтов-подмножеств. |
SubsetInfo | Неизменяемое описание одного обнаруженного подмножества. |
DesubsetPlan | Намеченные подмножества плюс оценочное увеличение размера. |
Пример кода — быстрый старт
Заголовок раздела «Пример кода — быстрый старт»use NextPDF\Pro\FontTools\FontDesubsetter;
$subsets = (new FontDesubsetter())->analyzeSubsets($pdfBytes);foreach ($subsets as $info) { echo $info->baseFont . ': ' . $info->subsetGlyphCount . " glyphs\n";}Пример кода — продакшн
Заголовок раздела «Пример кода — продакшн»use NextPDF\Pro\FontTools\FontDesubsetter;
$desubsetter = new FontDesubsetter();$subsets = $desubsetter->analyzeSubsets($pdfBytes);$logger->info('fonttools.scan', ['subset_count' => count($subsets)]);Граничные случаи и подводные камни
Заголовок раздела «Граничные случаи и подводные камни»- Сканер сообщает о
/BaseFontбез шестибуквенного префикса как о записи, не являющейся подмножеством, а не пропускает её. - Оценочное увеличение размера — это эвристика на основе среднего числа байтов на глиф, а не измеренное значение.
- Обнаружение работает с байтовым представлением записей
/BaseFont; зашифрованные или сильно сжатые потоки объектов могут потребовать предварительного декодирования.
Производительность
Заголовок раздела «Производительность»Сканирование подмножеств линейно по длине байтов PDF. Планирование линейно по числу обнаруженных подмножеств.
Замечания по безопасности
Заголовок раздела «Замечания по безопасности»Font Tools читает только структурные метаданные. Он не выполняет программы шрифтов и не разрешает внешние ссылки на шрифты.
Соответствие
Заголовок раздела «Соответствие»| Поведение | Ссылка | Статус |
|---|---|---|
| Соглашение об именовании шрифтов-подмножеств | ISO 32000-2 §9.9.2 | Согласовано (пересказ) |
Контракт поведения
Заголовок раздела «Контракт поведения»FontDesubsetter::analyzeSubsets()сканирует исходные данные PDF на записи/BaseFont, распознаёт префикс подмножества из шести букв в верхнем регистре плюс+и возвращает каждую как неизменяемыйSubsetInfoс исходным именем семейства, числом глифов подмножества, полным числом глифов и кодировкой./BaseFontбез префикса подмножества сообщается как запись, не являющаяся подмножеством, а не пропускается.DesubsetPlanсобирает подмножества, намеченные к замене, и сообщает оценочное увеличение размера в байтах на основе среднего числа байтов на глиф — это эвристика, а не измеренное значение.- Это слой анализа и планирования. Он сообщает, что присутствует и во что обойдётся расширение подмножеств; он не переписывает программу шрифта, не выполняет программы шрифтов и не разрешает внешние ссылки на шрифты.
Примечание о границе Enterprise
Заголовок раздела «Примечание о границе Enterprise»Enterprise не меняет поведение Font Tools. Enterprise добавляет возможности более высокого уровня, документированные отдельно; они не требуются для обнаружения подмножеств или планирования их расширения.
Резервный вариант Core / альтернатива
Заголовок раздела «Резервный вариант Core / альтернатива»Конвейер шрифтов NextPDF Core с открытым исходным кодом обрабатывает встраивание базовых шрифтов. Учёт подмножеств и планирование их расширения — это дополнения Pro. См. /modules/font/.
Граница публикации
Заголовок раздела «Граница публикации»Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов не входят в область охвата.
См. также
Заголовок раздела «См. также»- Font Tools — Deep Reference — контракт API, поведение и режимы отказа.
- Optimizer — оптимизация размера файла.
- Core font module — обработка шрифтов с открытым исходным кодом.