THotPDF.RegisterAcroFormFont

ثبت چندفونتی /DR در AcroForm برای THotPDF (v2.119.42)

 

AddXFAPacket  AcroForm Support  SetFormUnicodeFontDict

یک فونت Unicode اضافی (Type 0 / CID-keyed) را برای قرار گرفتن در دیکشنری Default Resources یا /DRِ AcroForm ثبت می‌کند. این کار به یک سند PDF واحد اجازه می‌دهد چندین فونت Unicode را هم‌زمان در اختیار widgetهای AcroForm بگذارد - معمولاً برای فرم‌های چندزبانه‌ای که مثلاً به یک فونت لاتین، یک فونت CJK و یک فونت عربی در همان فرم نیاز دارند

 

Delphi syntax:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

  FontIndirectRef: THPDFObject);

 

توضیح

widgetهای AcroForm فونت‌ها را از طریق دیکشنری Default Resources (/DR) روی دیکشنری AcroForm ارجاع می‌دهند و این دیکشنری نقش مخزن منابع مشترک برای همهٔ appearance streamهای فیلدهای فرم را دارد. پیش از v2.119.42، /DRِ AcroForm دقیقاً یک فونت Unicode در اختیار می‌گذاشت (معمولاً فونت Type 0 ثبت‌شده از طریق SetFormUnicodeFontDict) و این موضوع گردش‌کارهای فرم چندزبانه را محدود می‌کرد، چون هر widget مجبور بود از همان برنامهٔ فونت رندر شود

 

بعد از v2.119.42 فراخواننده‌ها می‌توانند فونت‌های Unicode اضافی را با نام‌های دلخواه منبع ثبت کنند. هر فونت ثبت‌شده به یک ورودی /DR /Font /<name> <indirect ref> در دیکشنری /DRِ AcroForm در زمان EndDoc تبدیل می‌شود. سپس appearance streamهای widget می‌توانند هر نام ثبت‌شده‌ای را از طریق operatorِ /Tf <name> <size> خودشان داخل content stream ظاهر ارجاع دهند

 

پارامترها

FontResourceName - PDF Nameای که operator /Tf در جریان ظاهر به آن ارجاع می‌دهد. قرارداد: یک شناسهٔ کوتاه و پایدار بدون اسلش آغازین، مثل 'NotoSansArab' یا 'NotoSansCJK'. HotPDF هنگام سریال‌سازی اسلش آغازین را می‌نویسد

FontIndirectRef - یک دیکشنری فونت Type 0 (CID-keyed) غیرمستقیمِ موجود، که معمولاً حاصل CreateIndirectFontDict روی فونتی ثبت‌شده با RegisterUnicodeTTF است

 

گردش‌کار معمول (فرم چندزبانه)

 

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

 

اکنون widgetهای دارای محتوای عربی می‌توانند جریان ظاهر خود را با /NotoSansArab 12 Tf بسازند، در حالی که widgetهای دارای محتوای ژاپنی از /NotoSansJP 12 Tf استفاده می‌کنند و هر دو یک pool منابع /DR سراسری در سند را به اشتراک می‌گذارند

 

هم‌زیستی با SetFormUnicodeFontDict

کمک‌رویهٔ تک‌فونتی موجود (SetFormUnicodeFontDict) همچنان برای پروژه‌هایی که فقط به یک فونت Unicode در /DRِ AcroForm نیاز دارند کار می‌کند. RegisterAcroFormFont افزایشی است: فراخواننده‌ها می‌توانند آن را در کنار SetFormUnicodeFontDict استفاده کنند، یا وقتی بیش از یک فونت Unicode لازم است، آن را به‌طور کامل جایگزین SetFormUnicodeFontDict کنند

 

همچنین ببینید: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, پشتیبانی AcroForm, THPDFPage.AddTextField