Aller au contenu
getnextpdf.com

Pro édition

Outils de polices

NextPDF Pro inspecte les programmes de police embarqués, identifie les polices en sous-ensemble par leur convention de nommage standard et produit un plan de dé-sous-ensemblage structuré avec un impact estimé sur la taille.

Cette capacité est fournie dans NextPDF Pro (nextpdf/pro) et s’active avec une enveloppe de licence de niveau Pro. Un déploiement sans ce droit ne charge pas les classes de la capacité. Compare les éditions et obtiens une licence.

Aucun indicateur de licence par fonctionnalité ne conditionne ce module. Les classes de Font Tools sont disponibles dès que nextpdf/pro est installé.

Fenêtre de terminal
composer require nextpdf/pro:^3

Les polices en sous-ensemble dans un PDF n’embarquent que les glyphes utilisés par le document. Par convention, leur nom /BaseFont porte une étiquette de six lettres majuscules suivie d’un +, par exemple ABCDEF+Arial. NextPDF Pro :

  • Détecte les sous-ensembles. FontDesubsetter balaye les données PDF brutes à la recherche des entrées /BaseFont, reconnaît le motif de préfixe de sous-ensemble et rend compte de chaque entrée sous forme d’un objet-valeur SubsetInfo avec le nom de famille d’origine, le nombre de glyphes du sous-ensemble, le nombre total de glyphes et l’encodage.
  • Planifie le dé-sous-ensemblage. DesubsetPlan collecte les polices en sous-ensemble visées par un remplacement par des programmes de police complets et rend compte d’une augmentation estimée de la taille en octets, afin que tu puisses décider si le dé-sous-ensemblage vaut son coût en taille de fichier avant d’agir.

Font Tools est une couche d’analyse et de planification. Elle décrit ce qui est présent et ce que coûterait le dé-sous-ensemblage ; elle ne réécrit pas elle-même le programme de police.

Réécrire un programme de police embarqué est la partie difficile et risquée. Les contours de glyphes, le hinting et les tables cmap doivent rester cohérents, et une seule erreur corrompt le rendu. NextPDF Pro sépare donc le travail bon marché et sûr — inventaire et projection de coût — de cette réécriture coûteuse. Le balayeur ne lit que des octets ; il n’analyse ni n’exécute jamais un programme de police, ce qui le maintient déterministe et sans effet de bord. Le nombre de glyphes et l’écart de taille sont délibérément étiquetés comme des heuristiques, afin qu’une décision de capacité reste honnête au lieu de se fier à un nombre que le module ne peut pas mesurer. Cela te permet d’évaluer si le dé-sous-ensemblage vaut son coût avant de te procurer des programmes de police complets.

Contexte de conception : Les polices : la partie difficile.

ClasseResponsabilité
FontDesubsetterBalaye les données PDF et rend compte des entrées de polices en sous-ensemble.
SubsetInfoDescription immuable d’un sous-ensemble détecté.
DesubsetPlanSous-ensembles visés plus augmentation estimée de la taille.
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)]);
  • Le balayeur rend compte d’un /BaseFont sans le préfixe de six lettres comme entrée hors sous-ensemble, plutôt que de le passer.
  • L’augmentation estimée de la taille est une heuristique fondée sur la moyenne d’octets par glyphe, et non une valeur mesurée.
  • La détection fonctionne sur la représentation en octets des entrées /BaseFont ; les flux d’objets chiffrés ou fortement compressés peuvent nécessiter un décodage préalable.

Le balayage de sous-ensembles est linéaire par rapport à la longueur en octets du PDF. La planification est linéaire par rapport au nombre de sous-ensembles détectés.

Font Tools ne lit que des métadonnées structurelles. Il n’exécute aucun programme de police et ne résout aucune référence de police externe.

ComportementRéférenceStatut
Convention de nommage des polices en sous-ensembleISO 32000-2 §9.9.2Aligné (paraphrasé)
  • FontDesubsetter::analyzeSubsets() balaye les données PDF brutes à la recherche des entrées /BaseFont, reconnaît le préfixe de sous-ensemble de six lettres majuscules suivi d’un +, et renvoie chacune sous forme d’une SubsetInfo immuable avec le nom de famille d’origine, le nombre de glyphes du sous-ensemble, le nombre total de glyphes et l’encodage.
  • Un /BaseFont sans le préfixe de sous-ensemble est rapporté comme entrée hors sous-ensemble plutôt que passé.
  • DesubsetPlan collecte les sous-ensembles visés par un remplacement et rend compte d’une augmentation estimée de la taille en octets fondée sur la moyenne d’octets par glyphe — une heuristique, pas une valeur mesurée.
  • C’est une couche d’analyse et de planification. Elle rend compte de ce qui est présent et de ce que coûterait le dé-sous-ensemblage ; elle ne réécrit pas le programme de police, n’exécute aucun programme de police et ne résout aucune référence de police externe.

Enterprise ne change pas le comportement de Font Tools. Enterprise ajoute des fonctionnalités de niveau supérieur, documentées séparément ; elles ne sont pas requises pour la détection de sous-ensembles ou la planification du dé-sous-ensemblage.

Le pipeline de polices open source de NextPDF Core gère l’embarquement des polices de base. La comptabilité des sous-ensembles et la planification du dé-sous-ensemblage sont des ajouts de Pro. Voir /modules/font/.

Cette page ne documente que le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins d’espaces de noms internes, les classes d’assistance, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de tickets sont hors périmètre.