|
Fonctions de sous-ensemble CFF et OpenType Prise en charge des filtres PDF
|
Haut EnableFontSubsetting Sommaire |
|
Ces fonctions de niveau unité exposent la surface publique de sous-ensemble de polices CFF et OpenType-CFF utilisée par le pipeline de polices intégrées de HotPDF. HotPDF fournit aussi des unités réutilisables d’analyse Type 1 PFB et CFF pour les appelants qui ont besoin d’une inspection de polices plus bas niveau
Delphi syntax function HPDFSubsetCFF(const CFFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes; function HPDFSfntIsOTF(const Data: TBytes): Boolean; function HPDFOTFFindCFFTable(const Data: TBytes; out TableOff: Cardinal; out TableLen: Cardinal): Boolean; function HPDFSubsetOTFContainer(const OTFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes; function HPDFExtractTTFPostScriptName(const Data: TBytes): AnsiString;
Description HPDFSubsetCFF réécrit une charge utile de police CFF en place, en préservant les IDs de glyphes et en remplaçant les CharStrings et sous-routines inutilisés par des stubs minimaux. C’est l’aide destinée aux appelants qui ont déjà extrait une table CFF d’un conteneur de police
HPDFSfntIsOTF détecte un conteneur sfnt dont la version est OTTO. HPDFOTFFindCFFTable localise la table embarquée 'CFF '. HPDFSubsetOTFContainer combine ces étapes en sous-ensemble la table CFF embarquée et en renvoyant un conteneur OTF avec la disposition originale de la table sfnt préservée
Le sous-ensembliste reconnaît à la fois les CFF indexés par nom (un seul Private DICT, un seul Local Subr INDEX) et les CFF indexés CID (opérateur ROS Haut DICT, FDArray de plusieurs Private DICT de sous-polices, carte glyph-to-FD FDSelect, Local Subr INDEX par FD). La prise en charge CID depuis v2.40.0 couvre les polices OpenType-CFF CJK / Indic / Arabic telles que la famille Adobe Fan/Gothic/Heiti/Ming/Myungjo/Song Std, Kozuka Pr6N et Source Han Sans - le balayage de fermeture suit le contexte FD de chaque CharString conservé afin que les Local Subr INDEX par FD soient sous-ensemblés indépendamment
Les décodeurs entiers CFF, analyseurs FDArray / FDSelect et scanners de sous-programmes de bas niveau sont des détails d’implémentation derrière cette surface publique HPDFIsCFF2Font détecte un sfnt avec une table
Type 1 and CFF parser units
HPDFIsTrueTypeVariableFont détecte un sfnt contenant
HPDFSfntIsOTF détecte un conteneur sfnt dont la version est OTTO. HPDFOTFFindCFFTable localise la table 'CFF ' embarquée. HPDFSubsetOTFContainer crée un sous-ensemble des données CFF ou CFF2 embarquées et renvoie un conteneur OTF avec des checksums sfnt valides. HPDFExtractTTFPostScriptName lit le name ID 6 de la table
Le subsetter reconnaît le CFF à clé de nom (Private DICT unique, Local Subr INDEX unique) et le CFF à clé CID (opérateur ROS du Top DICT, FDArray de plusieurs Private DICT de sous-polices, map glyph-vers-FD FDSelect, Local Subr INDEXes par FD). Le support CID couvre les polices OpenType-CFF CJK / Indic / arabes ; le scan de closure suit le contexte FD de chaque CharString conservé afin que les Local Subr INDEXes par FD soient sous-ensemblés indépendamment
Les décodeurs d’entiers CFF de plus bas niveau, les parseurs FDArray / FDSelect et les scanners de sous-routines sont des détails d’implémentation derrière cette surface de helpers publique
Unités de parseurs Type 1 et CFF
Voir aussi: EnableFontSubsetting, FontEmbedding, Prise en charge des filtres PDF |
Le renderer de glyphes natif implémente les opérations Type 2 standard booléennes, arithmétiques, conditionnelles, de tableau transitoire et de pile, dont put, get, ifelse, random, dup, exch, index et roll
Les valeurs transitoires sont réinitialisées pour chaque glyphe, les valeurs aléatoires sont reproductibles, et les limites d’opérandes, de tableau transitoire, de récursion et d’exécution rejettent les programmes malformés sans renvoyer un contour partiel
Le scanner de subsetting résout les expressions arithmétiques et de tableau transitoire utilisées par les appels de subroutines locales et globales, y compris les opérandes Type 2 en virgule fixe 16.16
Lorsque des valeurs aléatoires, un état transitoire inconnu ou des effets de pile interprocéduraux rendent une cible d’appel incertaine, le subsetting conserve chaque subroutine candidate plutôt que d’abandonner une dépendance de contour potentiellement atteignable
Les opérations Multiple Master réservées et dépréciées restent non prises en charge et échouent explicitement