|
THotPDF.SetFormUnicodeFontDict
|
ด้านบน |
|
ลงทะเบียนฟอนต์ยูนิโค้ดที่ผู้เรียกจัดเตรียมไว้ในพจนานุกรมทรัพยากรเริ่มต้นของ AcroForm เพื่อให้เครื่องมือสร้างสตรีมลักษณะปรากฏอัตโนมัติของ HotPDF (PDF 1.7 ISO 32000-1 12.7.4.3) สามารถแสดงผลค่าเริ่มต้นของวิดเจ็ต Tx ที่ไม่ใช่ ASCII ลงใน /AP ได้โดยตรง แทนที่จะส่งตัวแทน AP ที่ว่างเปล่าของ v2.46.0 จับคู่กับ CreateIndirectFontDict เพื่อจัดสรรพจนานุกรมฟอนต์ทางอ้อมสำหรับใช้งาน
Delphi syntax: procedure SetFormUnicodeFontDict(const LogicalName: AnsiString; FontDict: THPDFDictionaryObject);
C++ syntax: void SetFormUnicodeFontDict(const AnsiString& LogicalName, THPDFDictionaryObject* FontDict);
คำอธิบาย เมื่อตั้งค่าทั้ง LogicalName และ FontDict แล้ว การส่งข้อมูลครั้งต่อๆ ไปจะเปลี่ยนไปสามประการ: (a) สตริง /DA ในระดับ AcroForm จะเปลี่ยนจาก '/Helv 12 Tf 0 0 0 rg' เป็น '/<LogicalName> 12 Tf 0 0 0 rg'; (b) พจนานุกรมย่อย AcroForm /DR /Font จะเพิ่มรายการ /<LogicalName> <FontDict-indirect-ref> ร่วมกับ /Helv + /ZaDb ที่มีอยู่เดิม; (c) วิดเจ็ต Tx แต่ละตัวที่เพิ่มผ่าน AddTextField หรือ AddRichTextField จะได้รับการตั้งค่า /DA ประจำฟิลด์ในแบบเดียวกัน เมื่อเปิดใช้งาน AutoFormAppearances และค่าเริ่มต้นของวิดเจ็ตมีไบต์ใดๆ >= 0x80 ฟังก์ชัน GenerateTextFieldAP จะส่ง Form XObject /AP /N จริงที่สตรีมเนื้อหาเลือกฟอนต์ที่ลงทะเบียนผ่าน Tf และแสดงผลข้อความเป็นตัวดำเนินการ Tj แบบ CID hex-string โดยพจนานุกรมย่อย /Resources/Font ของ Form จะอ้างอิงฟอนต์ทางอ้อมเดียวกันเพื่อให้ AP เป็นแบบเบ็ดเสร็จในตัวเอง เมื่อฟอนต์ที่ลงทะเบียนมาจาก RegisterUnicodeTTF อักขระ Unicode ในระนาบเสริม (ตัวอย่างเช่น U+1F600) จะถูกส่งออกผ่าน CID เดียวที่จัดสรรเป็นการภายใน แทนที่จะแยกคู่ทดแทน UTF-16 ออกเป็น CID ของ Identity-H สองตัว HotPDF จะรีเฟรชสตรีม /CIDToGIDMap, /W และ /ToUnicode ที่สร้างขึ้นเมื่อสิ้นสุดการทำงาน เพื่อให้ CID ภายในจับคู่กับสัญลักษณ์ฟอนต์จริง และการแยกข้อความจะแมปกลับไปที่คู่ทดแทน UTF-16BE ดั้งเดิม ฟิลด์ข้อความ ASCII จะยังคงใช้ /Helv และส่งเอาต์พุต /AP ที่เหมือนกันทุกไบต์ไปยังผู้เรียกใช้ v2.46.0 ส่งค่า LogicalName ว่าง + nil FontDict เพื่อล้างการลงทะเบียนและเปลี่ยนกลับเป็นลักษณะการทำงานแบบใช้ /Helv เท่านั้น เวิร์กโฟลว์ทั่วไป: เรียกใช้ SetFormUnicodeFontDict หนึ่งครั้งทันทีหลังจาก BeginDoc ก่อนที่จะเรียก AddTextField ใดๆ - วิดเจ็ตที่สร้างขึ้นก่อนหน้านี้จะไม่ได้รับการอัปเดตย้อนหลัง
LogicalName - PDF Name ที่ใช้เป็นคีย์ใน /DR/Font และเป็นตัวถูกดำเนินการของ Tf ภายในสตริง /DA ตัวอย่างเช่น 'F0' ต้องไม่ว่างเปล่าเมื่อลงทะเบียน ชื่อที่ว่างเปล่าที่มี FontDict ที่ไม่ใช่ nil จะทำให้เกิดข้อผิดพลาด FontDict - THPDFDictionaryObject ทางอ้อมที่เก็บทรัพยากรฟอนต์ PDF ที่ถูกต้อง ผู้เรียกมีหน้าที่รับผิดชอบในการสร้างพจนานุกรมฟอนต์อย่างถูกต้อง โดยทั่วไปคือฟอนต์ผสม Type 0 / CIDFontType2 + Identity-H + ToUnicode CMap สำหรับการใช้งานแบบลากเส้นอย่างเดียวหรือการแสดงผลแบบธรรมดา สามารถใช้ซับเซ็ต Type 1 / TrueType ได้ด้วย HotPDF จะไม่ตรวจสอบความถูกต้องของเนื้อหา มันเพียงแค่แปลงการอ้างอิงเป็นอนุกรมเท่านั้น
ขอบเขตการทำงาน - v2.56.0 ครอบคลุมเฉพาะวิดเจ็ต Tx บรรทัดเดียวเท่านั้น สำหรับวิดเจ็ต Tx แบบหลายบรรทัด (ffMultiline) และแบบรวมฟิลด์ (ffComb) ที่มีค่าเริ่มต้นไม่ใช่ ASCII จะยังคงส่งตัวแทน AP ที่ว่างเปล่าแบบ v2.46.0 ส่วนขยาย Unicode-AP สำหรับสาขาเหล่านั้นมีกำหนดการสำหรับ v2.57.0+ การปรับรูปร่างตามทิศทางขวาไปซ้าย (อาหรับ / ฮิบรู) ต้องใช้กฎการจัดรูปแบบข้อความแบบสองทิศทางของ Unicode (UAX #9) + การเชื่อมโยงตามบริบทของภาษาอาหรับ ซึ่งอยู่ในขอบเขตของ v2.57.0+ เช่นกัน
Code Example
ดูเพิ่มเติม CreateIndirectFontDict, AutoFormAppearances, AddTextField, AddRichTextField, Version
|