Запись THPDFFontDecoder
Хранит разрешённые таблицы декодирования и метрики ширин для одного загруженного шрифта PDF, построенные цепочкой fallback-декодирования шрифтов
Объявление
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;
Модуль
HPDFTextExtraction
Поля
| Поле | Назначение |
|---|---|
FontKey | Ключ ресурса вроде /F1, называющий шрифт; хранится для диагностики |
Subtype | Подтип словаря шрифта: Type0, Type1, TrueType, CIDFontType2 и родственные |
Strategies | Набор fallback-стратегий, которые удалось заполнить |
ToUnicodeMap | Разобранный CMap /ToUnicode с записями bfchar и bfrange; наивысший приоритет |
EncodingMap | Разобранный stream /Encoding или именованный CMap |
PredefinedEncoding | Имя предопределённой кодировки вроде WinAnsiEncoding |
CIDToGIDIdentity | True, когда CIDToGIDMap — Identity и явная таблица не нужна |
CIDToGIDs | Двоичный stream CIDToGIDMap, развёрнутый в один Word на CID |
CIDToUnicode | Таблица CID → Unicode из fallback'а cid2code.txt |
GlyphNameUnicode | 256-элементная таблица «имя глифа → Unicode», используемая при восстановлении через /Differences |
GIDToUnicode | Встроенный cmap, обращённый от glyph ID к Unicode |
Widths | Ширины /Widths простого шрифта в 1/1000 em, индексируемые как код минус FirstChar |
FirstChar | Первый поддерживаемый код символа массива Widths |
LastChar | Последний поддерживаемый код символа массива Widths |
CIDWidths | Диапазоны ширин CID из массива /W CIDFont |
CIDDefaultWidth | Ширина CID по умолчанию из /DW |
CIDVertWidths | Вертикальные метрики /W2, хранимые тройками [w1y v1x v1y] на CID или диапазон |
CIDVertDefaultAdvance | Вертикальное смещение по умолчанию из w1y в /DW2, по умолчанию -1000 |
CIDVertDefaultOriginY | Вертикальное начало по умолчанию из v1y в /DW2, по умолчанию 880 |
VerticalWriting | True, когда метрики WMode 1 открывают вертикальную ветвь распознавателя |
Ascent | Верхняя выносная шрифта (ascent) из метрик дескриптора шрифта |
Descent | Нижняя выносная шрифта (descent) из метрик дескриптора шрифта |
HasVerticalMetrics | True, когда для шрифта найдены вертикальные метрики |
CodeUnitBytes | Байтов на код символа; сообщается интерпретатору content для этого шрифта |
OK | True, когда пригодна хотя бы одна стратегия декодирования |
Примечания по использованию
- Строится функцией
HPDFBuildFontDecoder; простая запись держит шрифты целой страницы дёшево, без собственной аллокации в куче HPDFDecodeCharCodeобходит стратегии в порядке приоритета и возвращает 0 при промахе; отсутствующие stream бесшумно деградируют к следующей стратегии- Вызывайте
HPDFCloneFontDecoder, когда декодер должен пережить породивший его кэш: динамические массивы разделяются по ссылке