|
CFF- und OpenType-Schriftartenuntergruppenbildungsfunktionen
|
Nach oben EnableFontSubsetting Inhalt |
|
Diese Funktionen auf Unit-Ebene bilden die öffentliche Schnittstelle zur Inspektion von CFF-, OpenType-CFF- und sfnt-Fonts, die HotPDFs Pipeline für eingebettete Fonts verwendet. Für Aufrufer, die Fonts auf einer tieferen Ebene untersuchen müssen, liefert HotPDF außerdem wiederverwendbare Parser-Units für Type 1 PFB und CFF mit
Delphi syntax function HPDFSubsetCFF(const CFFBytes: TBytes; const KeepGlyph: array of Boolean): TBytes; function HPDFIsCFF2Font(const FontBytes: TBytes): Boolean; function HPDFInstantiateCFF2Font(const FontBytes: TBytes; const AxisValues: THPDFVariableFontAxisValueArray): TBytes; function HPDFSubsetCFF2Font(const FontBytes: TBytes; const KeepGlyph: array of Boolean): TBytes; function HPDFIsTrueTypeVariableFont(const FontBytes: TBytes): Boolean; function HPDFInstantiateTrueTypeVariableFont(const FontBytes: TBytes; const AxisValues: THPDFVariableFontAxisValueArray): 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;
Description HPDFSubsetCFF schreibt eine CFF-Font-Nutzlast direkt an Ort und Stelle um: Glyph-IDs bleiben erhalten, ungenutzte CharStrings und Subroutinen werden durch minimale Stubs ersetzt. Das ist der passende Helper für Aufrufer, die bereits eine CFF-Tabelle aus einem Font-Container extrahiert haben
HPDFIsCFF2Font erkennt ein sfnt mit einer
HPDFSubsetCFF2Font führt dieselbe Instanziierung mit den Standardkoordinaten durch und ersetzt dabei ungenutzte Glyph-Programme durch leere CharStrings. Glyph-IDs, Multi-FD-Dictionaries, private Hint-Daten und Font-Matrizen bleiben erhalten
HPDFIsTrueTypeVariableFont erkennt ein sfnt mit
HPDFSfntIsOTF erkennt einen sfnt-Container mit der Version OTTO. HPDFOTFFindCFFTable findet die eingebettete 'CFF '-Tabelle. HPDFSubsetOTFContainer bildet aus eingebetteten CFF- oder CFF2-Daten ein Subset und liefert einen OTF-Container mit gültigen sfnt-Prüfsummen zurück. HPDFExtractTTFPostScriptName liest die Name-ID 6 aus der sfnt-Tabelle
Der Subsetter erkennt sowohl name-keyed CFF (ein einzelnes Private DICT, ein einzelner Local Subr INDEX) als auch CID-keyed CFF (ROS-Operator im Top DICT, FDArray mit mehreren Private DICTs der Sub-Fonts, FDSelect als Glyph-zu-FD-Zuordnung, Local Subr INDEXes pro FD). Die CID-Unterstützung deckt OpenType-CFF-Fonts für CJK, Indic und Arabisch ab; der Closure-Scan verfolgt den FD-Kontext jedes behaltenen CharStrings, sodass die Local Subr INDEXes pro FD unabhängig voneinander als Subset aufgebaut werden
Die untergeordneten CFF-Integer-Decoder, die FDArray-/FDSelect-Parser und die Subroutinen-Scanner sind Implementierungsdetails hinter dieser öffentlichen Helper-Schnittstelle
Type 1 and CFF parser units
See also: EnableFontSubsetting, FontEmbedding, PDF Filter Support |
Der native Glyphen-Renderer implementiert die Standard-Type-2-Operationen für Boolean, Arithmetik, Bedingungen, Transient-Arrays und den Stapel, einschließlich put, get, ifelse, random, dup, exch, index und roll
Transiente Werte werden je Glyphe zurückgesetzt, Zufallswerte sind reproduzierbar, und Grenzen für Operanden, Transient-Arrays, Rekursion und Ausführung weisen fehlerhafte Programme zurück, ohne eine teilweise Kontur zu liefern
Der Subset-Scanner löst die von lokalen und globalen Subroutinen-Aufrufen verwendeten arithmetischen und Transient-Array-Ausdrücke auf, einschließlich Type-2-16.16-Festkomma-Operanden
Wenn Zufallswerte, unbekannter transiter Zustand oder prozedurübergreifende Stapeleffekte ein Aufrufziel unsicher machen, behält das Subsetting jede Kandidaten-Subroutine, statt eine potenziell erreichbare Konturabhängigkeit fallen zu lassen
Reservierte und veraltete Multiple-Master-Operationen bleiben ununterstützt und schlagen explizit fehl