字型後援與直書文字
HotPDF 可依 Unicode 字稿選擇後援字體、回報仍未解析的字碼指標,並透過真正的 CID 直書模式寫入 CJK 文字
文件層級後援鏈
THotPDF.SetFontFallbackChain 會為一個 THPDFFontScript 類別儲存有序的字體清單
THPDFPage.TextOutWithFallback 會將每個 Unicode 純量對所選字體、其字稿鏈與通用鏈進行解析,然後將使用相同字體的相鄰純量作為單一文字段發出
- 後援鏈屬於文件設定,可跨頁面使用
- 重複與空白字體名稱會被移除,同時保留呼叫端的順序
- 已安裝字體的探測會在接受涵蓋範圍之前拒絕無聲的 GDI 替代
- 輔助平面純量會在分類之前從 UTF-16 surrogate 配對解碼
- 每個後援段會使用既有的內嵌 Type0 字型、子集化、
ToUnicode與共用的跨頁字型路徑 - 後援版面會以要求的粗體與斜體字面檢查已安裝的字型家族,跨文字段保留所有字型樣式、charset、大小與書寫方向設定,事後還原呼叫端的字型
可操作的診斷
AnalyzeUnresolvedGlyphs 會執行唯讀的涵蓋範圍稽核,而 TextOutWithFallback 則會記錄輸出期間遇到的未解析純量
每個 THPDFUnresolvedGlyphInfo 包含純量字碼指標、主要字體、已分類的字稿,以及以分號分隔的後援建議清單
GetUnresolvedGlyphs 傳回目前的文件報告,而 ClearUnresolvedGlyphs 則啟動新的報告區間
THotPDF.ResolveFontForCodePoint 與 THotPDF.AnalyzeUnresolvedGlyphs 的明確樣式多載接受 TFontStyles,preflight 因此能檢查與輸出相同的字面;原本的多載仍檢查標準字面
文字方框、SVG 內嵌文字與已載入文字外觀會在後援版面中保留帶樣式的字型家族,不會把 PDF 內部字型名稱當成系統家族,也不會把每個文字段都切成標準字面
直書 CJK 寫入
THPDFPage.TextOutVertical 會選取目前字體的直書變體,並發出單一 Identity-V 文字段,而非手動定位每個字元
- CID 後代字型包含
/DW2預設值與字符特定的/W2項目 - 當存在時,OpenType
vhea與vmtx提供直書前進量,而VORG提供直書原點VORG - 沒有直書表格的字型會使用可設定的 1000 單位前進量與 880 單位原點預設值
- 使用
sfVerticalAlternates時,完整的等長 GSUB run 會在字型宣告vrt2時使用它,否則退回vert,並保留作用中的文字系統與語言選擇 - 字型缺少某個標點替換、但對應了 Unicode 直立呈現形式時,逗號、頓號、括號、破折號、刪節號與相關標點會使用那些 glyph,而
ToUnicode - 既有的
vert、vrt2與直書 GPOS 功能仍可透過ShapingFeatures使用 GetVerticalTextAdvance傳回定位下一個直書段所需的使用者空間前進量
範例
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;