Funkcje podzbiorów czcionek CFF i OpenType

PDF Filter Support

 

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ą CFF2. HPDFInstantiateCFF2Font rozwiązuje wybrane współrzędne fvar przez avar 1.0 albo 2.0, ewaluuje operacje blend wspierane VariationStore przez rekurencyjne subroutyny, wypieka metryki HVAR, VVAR i MVAR, usuwa tabele zmienne i zwraca statyczny sfnt z poprawną sumą kontrolną

 

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 fvar, glyf i loca. HPDFInstantiateTrueTypeVariableFont mapuje wybrane osie przez avar, ewaluuje krotki gvar i interpolację IUP, aktualizuje proste i złożone kontury plus metryki punktów fantomowych, nakłada HVAR, VVAR i MVAR, gdzie ma to zastosowanie, usuwa tabele wariacji i zwraca statyczny sfnt z poprawną sumą kontrolną

 

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 name i zwraca nazwę czcionki PostScript, jeśli jest obecna

 

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

HPDFType1Core, HPDFType1Glyphs, HPDFType1CFFHandler i HPDFType1PFBHandler dostarczają reużywalne czytniki tablic bajtowych, ekstrakcję poleceń konturów glifów Type 1, parsowanie CFF Header / INDEX / słownika / charset / encoding oraz metadane Type 1 PFB plus helpery wyszukiwania glifów. HPDFType1CFFHandler rozwiązuje dziedziczenie SyntheticBase w obrębie FontSet dla wartości Top i Private DICT, CharStrings, charset, Encoding i Local Subrs, odrzucając przy tym nieprawidłowe indeksy, cykle i nadmierną głębokość. HPDFType1CB dostarcza punkt wejścia parsera przyjazny C++Builder. Jednostki są dołączone do projektów pakietów Delphi i C++Builder, więc aplikacje mogą inspekcjonować dane Type 1 PFB i CFF bez reimplementowania parserów binarnych

 

Zobacz też: EnableFontSubsetting, FontEmbedding, PDF Filter Support

Operacje stosu Type 2 i bezpieczeństwo podprogramów

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