|
Funkcje podzbiorów czcionek CFF i OpenType
|
Góra EnableFontSubsetting Spis treści |
|
Te funkcje na poziomie modułu udostępniają publiczną powierzchnię inspekcji i tworzenia podzbiorów czcionek CFF, OpenType-CFF oraz sfnt używaną przez potok osadzonych czcionek HotPDF. HotPDF dostarcza także moduły parserów Type 1 PFB i CFF wielokrotnego użytku dla wywołujących, którzy potrzebują niższego poziomu inspekcji czcionek
Składnia Delphi 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;
Opis HPDFSubsetCFF przepisuje ładunek czcionki CFF w miejscu, zachowując identyfikatory glyph ID i zastępując nieużywane CharStrings oraz podprogramy minimalnymi atrapami. To funkcja pomocnicza dla wywołujących, którzy już wyodrębnili tabelę CFF z kontenera czcionki
function HPDFExtractTTFPostScriptName(const Data: TBytes): AnsiString;
Opis HPDFSubsetCFF przepisuje ładunek fontu CFF w miejscu, zachowując glyph ID i zastępując nieużywane CharStrings oraz subroutyny minimalnymi stubami. To helper dla wywołujących, którzy już wyekstrahowali tabelę CFF z kontenera fontu
HPDFIsCFF2Font wykrywa sfnt z tabelą
HPDFSubsetCFF2Font wykonuje tę samą instantiację współrzędnych domyślnych, podmieniając nieużywane programy glifów na puste CharStrings. Zachowuje glyph ID, słowniki multi-FD, prywatne dane hintingowe i macierze fontu
HPDFIsTrueTypeVariableFont wykrywa sfnt zawierające
HPDFSfntIsOTF wykrywa kontener sfnt, którego wersją jest OTTO. HPDFOTFFindCFFTable lokalizuje osadzoną tabelę 'CFF '. HPDFSubsetOTFContainer łączy te kroki, tworząc podzbiór osadzonej tabeli CFF i zwracając kontener OTF z zachowanym oryginalnym układem tabel sfnt. HPDFExtractTTFPostScriptName odczytuje name ID 6 z tabeli sfnt
Narzędzie do tworzenia podzbiorów rozpoznaje zarówno CFF oparte na nazwach (pojedynczy Private DICT, pojedynczy Local Subr INDEX), jak i CFF oparte na CID (operator ROS w Top DICT, FDArray z wieloma Private DICT podczcionek, mapa FDSelect glyph-to-FD, osobne Local Subr INDEXes dla każdego FD). Obsługa CID obejmuje czcionki OpenType-CFF CJK / Indic / Arabic; skan domknięcia śledzi kontekst FD każdego zachowanego CharString, więc Local Subr INDEXes dla poszczególnych FD są niezależnie redukowane
Niższego poziomu dekodery liczb całkowitych CFF, parsery FDArray / FDSelect i skanery podprogramów są szczegółami implementacji za tą publiczną powierzchnią pomocniczą
Moduły parserów Type 1 i CFF
Zobacz też: EnableFontSubsetting, FontEmbedding, PDF Filter Support |
Natywny renderer glifów implementuje standardowe operacje Type 2: boolowskie, arytmetyczne, warunkowe, tablic przejściowych i stosowe, łącznie z put, get, ifelse, random, dup, exch, index i roll
Wartości przejściowe resetują się dla każdego glifu, wartości losowe są odtwarzalne, a limity operandów, tablic przejściowych, rekursji i wykonania odrzucają źle uformowane programy bez zwracania częściowego konturu
Skaner podzbiorów rozwiązuje wyrażenia arytmetyczne i tablic przejściowych używane przez wywołania podprogramów lokalnych i globalnych, łącznie z operandami stałopozycyjnymi 16.16 Type 2
Gdy wartości losowe, nieznany stan przejściowy albo międzyproceduralne efekty stosu czynią cel wywołania niepewnym, tworzenie podzbioru zachowuje każdy kandydujący podprogram, zamiast porzucać potencjalnie osiągalną zależność konturu
Zarezerwowane i przestarzałe operacje Multiple Master pozostają nieobsługiwane i kończą się jawnym błędem