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