THotPDF.RegisterAcroFormFont

THotPDF AcroForm /DR multi-font registration (v2.119.42)

 

AddXFAPacket  AcroForm Support  SetFormUnicodeFontDict

ลงทะเบียนฟอนต์ยูนิโค้ด (Type 0 / CID-keyed) เพิ่มเติมเพื่อรวมไว้ในพจนานุกรม Default Resources (/DR) ของ AcroForm ช่วยให้เอกสาร PDF เดียวสามารถแสดงฟอนต์ยูนิโค้ดหลายแบบไปยังวิดเจ็ต AcroForm ได้พร้อมกัน โดยทั่วไปจะใช้สำหรับฟอร์มหลายภาษาที่ต้องการ (ตัวอย่างเช่น) ฟอนต์ละติน บวกกับฟอนต์ CJK บวกกับฟอนต์อาหรับในฟอร์มเดียวกัน

 

Delphi syntax:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

FontIndirectRef: THPDFObject);

 

คำอธิบาย

วิดเจ็ต AcroForm จะอ้างอิงฟอนต์ผ่านพจนานุกรม Default Resources (/DR) ใน AcroForm dict ซึ่งทำหน้าที่เป็นกลุ่มทรัพยากรที่ใช้ร่วมกันสำหรับสตรีมลักษณะปรากฏของฟิลด์ฟอร์มทั้งหมด โดยก่อนหน้า v2.119.42 พจนานุกรม AcroForm /DR จะแสดงฟอนต์ยูนิโค้ดเพียงตัวเดียวเท่านั้น (โดยปกติคือฟอนต์ Type 0 ที่ตั้งค่าโดยตัวช่วยและลงทะเบียนผ่าน SetFormUnicodeFontDict) ซึ่งจำกัดเวิร์กโฟลว์ของฟอร์มหลายภาษา เนื่องจากทุกวิดเจ็ตต้องแสดงผลผ่านโปรแกรมฟอนต์เดียวกัน

 

หลังจาก v2.119.42 ผู้เรียกใช้สามารถลงทะเบียนฟอนต์ยูนิโค้ดเพิ่มเติมตามชื่อทรัพยากรที่กำหนดเองได้ โดยแต่ละฟอนต์ที่ลงทะเบียนจะกลายเป็นรายการ /DR /Font /<name> <indirect ref> ภายใน AcroForm /DR dict เมื่อจบการทำงานที่ EndDoc จากนั้นสตรีมลักษณะปรากฏของวิดเจ็ตจะสามารถอ้างอิงชื่อที่ลงทะเบียนใดๆ ก็ได้ผ่านตัวดำเนินการ /Tf <name> <size> ของตนเองภายในสตรีมเนื้อหาลักษณะปรากฏ

 

พารามิเตอร์

FontResourceName - PDF Name ที่ตัวดำเนินการของสตรีมลักษณะปรากฏ /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);

 

ตอนนี้วิดเจ็ตที่มีเนื้อหาภาษาอาหรับสามารถสร้างสตรีมลักษณะปรากฏด้วย /NotoSansArab 12 Tf ในขณะที่วิดเจ็ตที่มีเนื้อหาภาษาญี่ปุ่นจะใช้ /NotoSansJP 12 Tf โดยใช้พูลทรัพยากร AcroForm /DR ร่วมกันทั่วทั้งเอกสาร

 

การอยู่ร่วมกันกับ SetFormUnicodeFontDict

ตัวช่วยฟอนต์เดี่ยวที่มีอยู่แล้ว (SetFormUnicodeFontDict) จะยังคงทำงานได้สำหรับโปรเจกต์ที่ต้องการฟอนต์ยูนิโค้ดเพียงหนึ่งตัวใน AcroForm /DR โดยเมธอด RegisterAcroFormFont จะเป็นแบบเสริมเพิ่มเติม: ผู้เรียกสามารถใช้ร่วมกับ SetFormUnicodeFontDict หรือแทนที่ SetFormUnicodeFontDict ทั้งหมดเมื่อต้องการฟอนต์ยูนิโค้ดมากกว่าหนึ่งตัว

 

ดูเพิ่มเติม: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, AcroForm Support, THPDFPage.AddTextField