CFF- und OpenType-Schriftartenuntergruppenbildungsfunktionen

PDF-Filterunterstützung

 

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 CFF2-Tabelle. HPDFInstantiateCFF2Font löst ausgewählte fvar-Koordinaten über avar 1.0 oder 2.0 auf, wertet VariationStore-basierte blend-Operationen über rekursive Subroutinen hinweg aus, backt die Metriken aus HVAR, VVAR und MVAR ein, entfernt die variablen Tabellen und liefert ein statisches sfnt mit korrekten Prüfsummen zurück

 

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 fvar, glyf und loca. HPDFInstantiateTrueTypeVariableFont bildet die gewählten Achsen über avar ab, wertet gvar-Tupel und IUP-Interpolation aus, aktualisiert einfache und zusammengesetzte Konturen samt Metriken der Phantompunkte, wendet HVAR, VVAR und MVAR an, sofern vorhanden, entfernt die Variationstabellen und liefert ein statisches sfnt mit korrekten Prüfsummen zurück

 

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 name und gibt den PostScript-Fontnamen zurück, sofern vorhanden

 

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

HPDFType1Core, HPDFType1Glyphs, HPDFType1CFFHandler und HPDFType1PFBHandler stellen wiederverwendbare Byte-Array-Reader, die Extraktion von Type-1-Glyph-Konturbefehlen, das Parsen von CFF Header / INDEX / Dictionary / Charset / Encoding sowie Type-1-PFB-Metadaten samt Glyph-Lookup-Helpern bereit. HPDFType1CFFHandler löst die SyntheticBase-Vererbung über ein FontSet hinweg auf, und zwar für Werte aus Top und Private DICT, CharStrings, Charset, Encoding und Local Subrs; ungültige Indizes, Zyklen und übermäßige Tiefe werden dabei abgelehnt. HPDFType1CB bietet einen für C++Builder geeigneten Parser-Einstiegspunkt. Die Units sind in den Package-Projekten für Delphi und C++Builder enthalten, sodass Anwendungen Type-1-PFB- und CFF-Daten untersuchen können, ohne die binären Parser selbst nachzubauen

 

See also: EnableFontSubsetting, FontEmbedding, PDF Filter Support

Type-2-Stapeloperationen und Subroutinen-Sicherheit

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