THotPDF.RegisterAcroFormFont

THotPDF AcroForm /DR meervoudige-fontregistratie (v2.119.42)

 

AddXFAPacket  AcroForm-ondersteuning  SetFormUnicodeFontDict

Registreert een extra Unicode-lettertype (Type 0 / CID-keyed) voor opname in de AcroForm Default Resources (/DR)-dictionary. Hiermee kan één PDF-document meerdere Unicode-lettertypen tegelijk aan AcroForm-widgets aanbieden - typisch voor meertalige formulieren die bijvoorbeeld een Latijns font plus een CJK-font plus een Arabisch font in hetzelfde formulier nodig hebben

 

Delphi-syntaxis:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

  FontIndirectRef: THPDFObject);

 

Beschrijving

AcroForm-widgets verwijzen naar fonts via een Default Resources (/DR)-dictionary op de AcroForm-dict, die fungeert als de gedeelde resourcepool voor alle appearance streams van formuliervelden. Voor v2.119.42 bood de AcroForm /DR precies één Unicode-font aan (meestal het door de helper ingestelde Type 0-font dat via SetFormUnicodeFontDict werd geregistreerd), wat meertalige formulierstromen beperkte omdat elke widget via hetzelfde fontprogramma moest renderen

 

Vanaf v2.119.42 kunnen aanroepers extra Unicode-fonts registreren onder willekeurige resourcenamen. Elk geregistreerd font wordt bij EndDoc een /DR /Font /<name> <indirect ref>-item in de AcroForm /DR-dict. Widget appearance streams kunnen daarna elk geregistreerd naamreferentie via hun eigen /Tf <name> <size>-operator in de appearance-contentstream gebruiken

 

Parameters

FontResourceName - de PDF-naam waarnaar de /Tf-operator van de appearance stream verwijst. Conventie: een korte, stabiele identifier zonder schuine streep ervoor (bijv. 'NotoSansArab', 'NotoSansCJK'). HotPDF schrijft de schuine streep bij serialisatie

FontIndirectRef - een bestaande indirecte Type 0 (CID-keyed) fontdictionary, meestal het resultaat van CreateIndirectFontDict op een font dat via RegisterUnicodeTTF is geregistreerd

 

Typische workflow (meertalig formulier)

 

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);

 

Arabische widgets kunnen hun appearance streams nu schrijven met /NotoSansArab 12 Tf, terwijl Japanse widgets /NotoSansJP 12 Tf gebruiken, en daarbij één documentbrede AcroForm /DR-resourcepool delen

 

Coexistence with SetFormUnicodeFontDict

De bestaande helper voor één font (SetFormUnicodeFontDict) blijft werken voor projecten die slechts één Unicode-font in de AcroForm /DR nodig hebben. RegisterAcroFormFont is aanvullend: aanroepers kunnen het naast SetFormUnicodeFontDict gebruiken of SetFormUnicodeFontDict helemaal vervangen wanneer meer dan één Unicode-font nodig is

 

Zie ook: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, AcroForm-ondersteuning, THPDFPage.AddTextField