THotPDF.RegisterAcroFormFont

THotPDF AcroForm /DR Multi-Schriftarten-Registrierung (v2.119.42)

 

AddXFAPacket  AcroForm-Unterstützung  SetFormUnicodeFontDict

Registriert eine zusätzliche Unicode-Schriftart (Type 0 / CID-basiert) zur Aufnahme in das AcroForm-Standardressourcen-Verzeichnis (/DR) — Ermöglicht es einem einzelnen PDF-Dokument, AcroForm-Widgets gleichzeitig mehrere Unicode-Schriftarten zur Verfügung zu stellen — Dies wird typischerweise für mehrsprachige Formulare verwendet, die beispielsweise eine lateinische, eine CJK- und eine arabische Schriftart im selben Formular benötigen

 

Delphi-Syntax:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

  FontIndirectRef: THPDFObject);

 

Beschreibung

AcroForm-Widgets verweisen auf Schriftarten über ein Standardressourcen-Verzeichnis (/DR) im AcroForm-Dictionary, das als gemeinsamer Ressourcen-Pool für alle Darstellungs-Streams von Formularfeldern dient — Vor v2.119.42 bot das AcroForm /DR genau eine Unicode-Schriftart (typischerweise die über SetFormUnicodeFontDict registrierte Type-0-Hilfsschriftart), was mehrsprachige Formular-Workflows einschränkte, da jedes Widget über dasselbe Schriftprogramm gerendert werden musste

 

Nach v2.119.42 können Aufrufer zusätzliche Unicode-Schriftarten unter beliebigen Ressourcennamen registrieren — Jede registrierte Schriftart wird beim Aufruf von EndDoc zu einem Eintrag der Form /DR /Font /<name> <indirekte Referenz> im AcroForm-/DR-Dictionary — Widgets-Darstellungs-Streams können dann auf jeden der registrierten Namen über ihren eigenen /Tf <name> <größe>-Operator im Darstellungs-Inhaltsstream verweisen

 

Parameter

FontResourceName — der PDF-Name, auf den der /Tf-Operator des Darstellungs-Streams verweist (Konvention: ein kurzer, stabiler Bezeichner ohne führenden Schrägstrich, z. B. 'NotoSansArab', 'NotoSansCJK' — HotPDF schreibt den führenden Schrägstrich bei der Serialisierung)

FontIndirectRef — ein vorhandenes indirektes Type-0-Schriftverzeichnis (CID-basiert), typischerweise das Ergebnis von CreateIndirectFontDict für eine über RegisterUnicodeTTF registrierte Schriftart

 

Typischer Arbeitsablauf (mehrsprachiges Formular)

 

PDF.RegisterUnicodeTTF('NotoSansArab', 'NotoSansArabic-Regular.ttf');

PDF.RegisterUnicodeTTF('NotoSansJP'  , 'NotoSansJP-Regular.otf');

ArabRef := PDF.CreateIndirectFontDict('NotoSansArab');

JPRef   := PDF.CreateIndirectFontDict('NotoSansJP');

PDF.RegisterAcroFormFont('NotoSansArab', ArabRef);

PDF.RegisterAcroFormFont('NotoSansJP'  , JPRef);

 

Nun können Widgets mit arabischem Inhalt ihre Darstellungs-Streams mit /NotoSansArab 12 Tf erstellen, während Widgets mit japanischem Inhalt /NotoSansJP 12 Tf verwenden — Sie teilen sich einen dokumentweiten AcroForm-/DR-Ressourcenpool

 

Koexistenz mit SetFormUnicodeFontDict

Die bereits vorhandene Ein-Schriftarten-Hilfsfunktion (SetFormUnicodeFontDict) funktioniert weiterhin für Projekte, die nur eine Unicode-Schriftart im AcroForm /DR benötigen — RegisterAcroFormFont ist additiv: Aufrufer können sie zusätzlich zu SetFormUnicodeFontDict verwenden oder SetFormUnicodeFontDict vollständig ersetzen, wenn mehr als eine Unicode-Schriftart benötigt wird

 

Siehe auch: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, AcroForm-Unterstützung, THPDFPage.AddTextField