HPDFShapeHeadlessText

function HPDFShapeHeadlessText(const Text: UnicodeString;
  const FontBytes: SysUtils.TBytes; MaximumGlyphs: Integer;
  CancellationToken: THPDFCancellationToken;
  MaximumLineAdvance: Double = 0; CharacterAdvance: Double = 0;
  WordAdvance: Double = 0): THPDFHeadlessShapedGlyphs;

透過 HarfBuzz 使用呼叫端提供的 OpenType 字型,並以 FriBidi 解析 Unicode 視覺 runs,保留 cluster 與 1000 單位字型座標中的定位

CR/LF 段落各自獨立 shaping;正的 MaximumLineAdvance 要求在最終 shaping pass 之前先做邏輯 cluster 換行

自動實體行繼承原始完整段落的方向性嵌入、覆寫、隔離與成對括號;每行有自己的空白重置、視覺重排與 HarfBuzz 連接 context

段落順序只解析一次,跨實體行重複使用且不被修改;實際的 CR/LF 分隔符會開啟新段落並重置控制狀態

自動換行改變文字時,SourceOffset 仍相對於正規化的換行後邏輯序列,包括插入的 U+000A 斷行與既有的 break space 移除;glyph 的 UnicodeText、欄位值與 PDF ActualText 保持其既定的邏輯契約

CharacterAdvance 與 WordAdvance 是同一 1000 單位字型座標中選填的有限前進量;字元前進在每個 shaped cluster 套用一次(含最後一個 cluster),只含 Unicode 方向控制字元的 cluster 除外;空白前進套用於 U+0020 cluster;兩者都計入邏輯換行與回傳的 glyph 前進量

輸入與產生的 glyph(包括插入的斷行記錄)受同一個 MaximumGlyphs 總量約束;格式錯誤的 surrogate 與缺少必要 glyph 會失敗;取消會在段落、runs、快取行解析與換行檢查點之間檢查

Linux 使用 libharfbuzz.so.0 與 libfribidi.so.0;Windows 需要符合架構的程式庫,可透過 HOTPDF_HARFBUZZ_LIBRARY 與 HOTPDF_FRIBIDI_LIBRARY 選擇提供明確路徑

PDF 字型權限、CID 物件、ToUnicode、外觀連結與增量輸出,請使用 HPDFBuildHeadlessTextAppearance 或文件外觀方法

Windows 原生複雜文字說明相符的處理程序架構與 runtime 相依搜尋路徑

用 HPDFShapeHeadlessTextSpan 為選定樣式項加上周圍段落 context 做 shaping,用 HPDFResolveHeadlessTextOrder 檢視實際 Unicode 視覺位置