Záznam THPDFFontDecoder
Drží vyřešené dekódovací tabulky a metriky šířek pro jeden načtený font PDF, sestavené řetězcem záložních postupů dekódování fontu
Deklarace
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;
Jednotka
HPDFTextExtraction
Pole
| Pole | Účel |
|---|---|
FontKey | Klíč prostředku, například /F1, pojmenovávající font; uchovává se pro diagnostiku |
Subtype | Podtyp slovníku fontu: Type0, Type1, TrueType, CIDFontType2 a podobné |
Strategies | Sada záložních strategií, které se úspěšně naplnily |
ToUnicodeMap | Rozebraná CMap /ToUnicode s položkami bfchar a bfrange, nejvyšší priorita |
EncodingMap | Rozebraný stream /Encoding nebo pojmenovaná CMap |
PredefinedEncoding | Název předdefinovaného kódování, například WinAnsiEncoding |
CIDToGIDIdentity | True, když je CIDToGIDMap Identity a explicitní tabulka není potřeba |
CIDToGIDs | Binární stream CIDToGIDMap rozbalený na jeden Word na CID |
CIDToUnicode | Tabulka CID na Unicode ze zálohy cid2code.txt |
GlyphNameUnicode | 256položková tabulka názvů glyphů na Unicode používaná pro zotavení přes /Differences |
GIDToUnicode | Vložená cmap obrácená z glyph ID na Unicode |
Widths | Posuny /Widths jednoduchého fontu v 1/1000 em, indexované kódem minus FirstChar |
FirstChar | První podporovaný kód znaku pole Widths |
LastChar | Poslední podporovaný kód znaku pole Widths |
CIDWidths | Rozsahy šířek CID z pole /W CIDFont |
CIDDefaultWidth | Výchozí posun CID z /DW |
CIDVertWidths | Svislé metriky /W2 uložené jako trojice [w1y v1x v1y] na CID nebo rozsah |
CIDVertDefaultAdvance | Výchozí svislý posun z w1y v /DW2, standardně -1000 |
CIDVertDefaultOriginY | Výchozí svislý počátek z v1y v /DW2, standardně 880 |
VerticalWriting | True, když metriky WMode 1 řídí svislou větev resolveru |
Ascent | Vzestup fontu přečtený z metrik deskriptoru fontu |
Descent | Sestup fontu přečtený z metrik deskriptoru fontu |
HasVerticalMetrics | True, když se pro font našly svislé metriky |
CodeUnitBytes | Bajty na kód znaku, hlášené obsahovému interpretu pro daný font |
OK | True, když je aspoň jedna dekódovací strategie použitelná |
Poznámky k použití
- Sestavujte přes
HPDFBuildFontDecoder; obyčejný záznam udržuje fonty celé stránky levné, sám žádnou alokaci na heapu nepotřebuje HPDFDecodeCharCodeprochází strategie podle priority a při nezásahu vrací 0; chybějící streamy tiše spadnou na další strategii- Když musí dekodér přežít mezipaměť, která ho vytvořila, zavolejte
HPDFCloneFontDecoder, protože dynamická pole se sdílejí referencí