Enregistrement THPDFFontDecoder
Porte les tables de décodage résolues et les métriques de largeur d'une police PDF chargée, construites par la chaîne de repli de décodage des polices
Déclaration
THPDFFontDecoder= record
FontKey: AnsiString; // resource key (e.g. /F1) for diagnostics
Subtype: AnsiString; // Type0, Type1, TrueType, CIDFontType2
Strategies: THPDFFontStrategies; // which fallbacks are populated
ToUnicodeMap: THPDFCMapParseResult;
EncodingMap: THPDFCMapParseResult; // /Encoding stream or named CMap
PredefinedEncoding: AnsiString; // 'WinAnsiEncoding' etc
CIDToGIDIdentity: boolean;
CIDToGIDs: array of Word; // binary CIDToGIDMap stream
CIDToUnicode: THPDFCIDToUnicodeTable; // cid2code.txt fallback
GlyphNameUnicode: array[0.. 255] of Cardinal;
GIDToUnicode: THPDFUnicodeByGID;
// v2.505.0 simple-font /Widths (PDF 1.7 9.6.3 Table 111). Index =
// (code - FirstChar); values are 1/1000-em glyph advances. Empty when
// the font has no /Widths array (the interpreter falls back to 0.5*fs)
Widths: array of Double;
FirstChar: Integer;
LastChar: Integer;
CIDWidths: THPDFCIDWidthRanges;
CIDDefaultWidth: Double;
// Vertical (WMode 1) counterparts from the descendant CIDFont /W2 and
// /DW2 (ISO 32000-1 9.7.4.3). Each /W2 metric is a [w1y v1x v1y]
// triple: w1y is the displacement along the writing axis, v1x/v1y the
// position vector from the glyph's horizontal origin to its vertical
// origin. A range entry (cFirst cLast w1y v1x v1y) stores one triple;
// a list entry (c [w1y v1x v1y ...]) stores one triple per CID from
// FirstCID to LastCID. VerticalWriting gates the resolver's vertical
// branch
CIDVertWidths: THPDFCIDWidthRanges;
CIDVertDefaultAdvance: Double; // /DW2 w1y (second entry); default -1000
CIDVertDefaultOriginY: Double; // /DW2 v1y (first entry); default 880
VerticalWriting: boolean;
Ascent: Double;
Descent: Double;
HasVerticalMetrics: boolean;
CodeUnitBytes: Integer; // bytes per char code
OK: boolean;
end;
Unité
HPDFTextExtraction
Champs
| Champ | Objectif |
|---|---|
FontKey | Clé de ressource comme /F1 nommant la police, conservée pour le diagnostic |
Subtype | Sous-type du dictionnaire de police : Type0, Type1, TrueType, CIDFontType2 et compagnie |
Strategies | Ensemble des stratégies de repli remplies avec succès |
ToUnicodeMap | CMap /ToUnicode analysée avec ses entrées bfchar et bfrange, priorité la plus haute |
EncodingMap | Flux /Encoding analysé ou CMap nommée |
PredefinedEncoding | Nom d'encodage prédéfini comme WinAnsiEncoding |
CIDToGIDIdentity | True quand le CIDToGIDMap vaut Identity et qu'aucune table explicite n'est nécessaire |
CIDToGIDs | Flux CIDToGIDMap binaire étendu en un Word par CID |
CIDToUnicode | Table CID vers Unicode issue du repli cid2code.txt |
GlyphNameUnicode | Table de 256 entrées nom de glyphe vers Unicode utilisée par la récupération /Differences |
GIDToUnicode | cmap embarquée inversée, de l'ID de glyphe vers Unicode |
Widths | Avances /Widths de police simple en 1/1000 d'em, indexées par code moins FirstChar |
FirstChar | Premier code de caractère pris en charge du tableau Widths |
LastChar | Dernier code de caractère pris en charge du tableau Widths |
CIDWidths | Plages de largeurs CID du tableau /W de la CIDFont |
CIDDefaultWidth | Avance CID par défaut issue de /DW |
CIDVertWidths | Métriques verticales /W2 stockées en triplets [w1y v1x v1y] par CID ou par plage |
CIDVertDefaultAdvance | Déplacement vertical par défaut issu du w1y de /DW2, -1000 par défaut |
CIDVertDefaultOriginY | Origine verticale par défaut issue du v1y de /DW2, 880 par défaut |
VerticalWriting | True quand les métriques WMode 1 conditionnent la branche verticale du résolveur |
Ascent | Ascendante de la police lue dans les métriques du descripteur de police |
Descent | Descendante de la police lue dans les métriques du descripteur de police |
HasVerticalMetrics | True quand des métriques verticales ont été trouvées pour la police |
CodeUnitBytes | Octets par code de caractère, communiqués à l'interpréteur de contenu pour la police |
OK | True quand au moins une stratégie de décodage est exploitable |
Notes d'utilisation
- À construire avec
HPDFBuildFontDecoder; l'enregistrement simple garde une page entière de polices à moindre coût, sans allocation de tas propre HPDFDecodeCharCodeparcourt les stratégies par ordre de priorité et renvoie 0 en cas d'échec ; les flux manquants rétrogradent silencieusement vers la stratégie suivante- Appelez
HPDFCloneFontDecoderquand un décodeur doit survivre au cache qui l'a produit, les tableaux dynamiques étant partagés par référence