Перейти к содержимому
getnextpdf.com

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 отделяет дешёвую и безопасную работу — инвентаризацию и прогноз затрат — от этого дорогостоящего переписывания. Сканер читает только байты; он никогда не разбирает и не выполняет программу шрифта, поэтому остаётся детерминированным и без побочных эффектов. Число глифов и разница в размере намеренно помечены как эвристики, чтобы оценка ёмкости оставалась честной, а не полагалась на число, которое модуль не может измерить. Это позволяет вам взвесить, стоит ли расширение подмножеств затрат, прежде чем искать полные программы шрифтов.

Проектные предпосылки: Шрифты: сложная часть.

КлассНазначение
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 не меняет поведение Font Tools. Enterprise добавляет возможности более высокого уровня, документированные отдельно; они не требуются для обнаружения подмножеств или планирования их расширения.

Конвейер шрифтов NextPDF Core с открытым исходным кодом обрабатывает встраивание базовых шрифтов. Учёт подмножеств и планирование их расширения — это дополнения Pro. См. /modules/font/.

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

  • Font Tools — Deep Reference — контракт API, поведение и режимы отказа.
  • Optimizer — оптимизация размера файла.
  • Core font module — обработка шрифтов с открытым исходным кодом.