Font Fallback and Vertical Text

HotPDF เลือก face สำรองตามสคริปต์ Unicode ได้, รายงาน code point ที่ยังไม่ระบุตัวได้ และเขียนข้อความ CJK ผ่าน writing mode แนวตั้งของ CID อย่างจริงจัง

ห่วงโซ่ fallback ระดับเอกสาร

THotPDF.SetFontFallbackChain เก็บรายการ face ที่เรียงลำดับไว้ต่อหมวด THPDFFontScript หนึ่งหมวด

THPDFPage.TextOutWithFallback resolve Unicode scalar แต่ละตัวกับ face ที่เลือก, ห่วงโซ่สคริปต์ของมัน และห่วงโซ่กลาง แล้วปล่อย scalar ที่ติดกันซึ่งใช้ face เดียวกันเป็น text run เดียว

การวินิจฉัยที่นำไปใช้ได้จริง

AnalyzeUnresolvedGlyphs ทำการตรวจ coverage แบบอ่านอย่างเดียว ขณะที่ TextOutWithFallback บันทึก scalar ที่ยังไม่ได้คำตอบที่เจอระหว่างเอาต์พุต

THPDFUnresolvedGlyphInfo แต่ละตัวมี code point ของ scalar, face หลัก, สคริปต์ที่จัดไว้ และรายการคำแนะนำ fallback คั่นด้วยเครื่องหมายอัฒภาค

GetUnresolvedGlyphs คืนรายงานปัจจุบันของเอกสาร และ ClearUnresolvedGlyphs เริ่มช่วงรายงานใหม่

overload แบบระบุสไตล์ของ THotPDF.ResolveFontForCodePoint กับ THotPDF.AnalyzeUnresolvedGlyphs รับ TFontStyles เพื่อให้ preflight ตรวจ face เดียวกับที่ใช้ตอน output ได้ ส่วน overload เดิมยังคงตรวจ face แบบ regular

text box, ข้อความที่ฝังใน SVG และ appearance ข้อความของเอกสารที่โหลด จะคง font family ที่มีสไตล์ไว้ตลอดการจัด fallback layout แทนที่จะเอาชื่อฟอนต์ภายในของ PDF ไปนับเป็น system family หรือดันทุก run ไปใช้ face แบบ regular

การเขียน CJK แนวตั้ง

THPDFPage.TextOutVertical เลือกตัวแปรแนวตั้งของ face ปัจจุบัน แล้วปล่อย text run เดียวแบบ Identity-V แทนการจัดตำแหน่งตัวอักษรทีละตัวด้วยมือ

ตัวอย่าง

PDF.SetFontFallbackChain(hfsCJK,
  ['Microsoft YaHei UI', 'Yu Gothic UI', 'Malgun Gothic']);
PDF.SetFontFallbackChain(hfsEmoji, ['Segoe UI Emoji']);

PDF.CurrentPage.SetFont('Arial', [], 12);
PDF.CurrentPage.TextOutWithFallback(72, 72, 0, Text);

PDF.CurrentPage.SetFont('Yu Gothic UI', [], 14);
PDF.CurrentPage.TextOutVertical(420, 72, VerticalText);

Missing := PDF.GetUnresolvedGlyphs;

API ที่เกี่ยวข้อง