THotPDF.PreviewLoadedPageTextReplacement Method

以內嵌 Unicode 字型準備取代文字,測量每個符合項,並在不更動已載入文件的前提下傳回可稽核的計畫

function PreviewLoadedPageTextReplacement(PageIndex: Integer;
  const Needle, Replacement: UnicodeString; MatchCase: Boolean;
  const Options: THPDFLoadedTextReplacementOptions;
  out Plan: THPDFLoadedTextReplacementPlan): Boolean;

選項與結果

THPDFLoadedTextReplacementOptions.Default 使用 Arial、符合項原本的字型大小、其量測寬度,以及該大小 1.25 倍的高度,並啟用原子式拒絕

Appearance 選擇字型、樣式、色彩、對齊與內距;UseMatchFontSize=False 時使用要求的尺寸,而正的 BoxWidth 與 BoxHeight 提供明確的換行方框

Appearance.OverflowPolicy 可選 ltopReject、ltopClip 或 ltopShrinkToFit;裁切只保留產出端放得下的文字,縮放至符合則在 MinFontSize 停止

THPDFLoadedTextReplacementPlan 攜帶請求、選項、來源指紋、計數,以及 THPDFLoadedTextReplacementResults 陣列

每個 THPDFLoadedTextReplacementResult 回報字形索引、原始位置、方框尺寸、有效字型大小,以及 THPDFLoadedTextReplacementStatus 值:ltrsReady、ltrsApplied、ltrsRejected 或 ltrsRolledBack,並附上拒絕或回滾的原因

MaxMatches、MaxGlyphs、MaxContentTokens、MaxContentBytes、MaxGeneratedBytes 與外觀文字上限,共同約束來源解析、輸出與複製的字型資源

幾何與原子性

產生的取代會使用文件的字型後援鏈、ShapingFeatures、字稿自動整形開關,以及 GSUB 字稿與語言選擇;請在預覽前設定好,並在套用計畫時保持相同設定

每個取代外觀最多允許 256 個不同的整形字型選擇,累積原始字型資料上限 64 MiB,這是在請求本身的解析與產生輸出預算之外

取代會在原始文字流內切換字型,讓周圍文字保持可搜尋,並還原原始的筆與行矩陣,讓後續字形與換行保持原位

支援使用水平、非奇異幾何的頁面直接文字,包括頁面變換、文字縮放、上升量、TJ、單/雙引號運算元,以及同一基線上跨越相鄰運算元的符合項

跨越基線的符合項、直書、奇異變換、不平衡內容、缺字,以及含簽署欄位的文件都會被拒絕;Form XObject 內的文字不在這個 API 的符合範圍內

Atomic=True 時,任何被拒絕的符合項都會回滾所有就緒的符合項;Atomic=False 時,就緒的符合項可以套用而被拒絕的保持不變,但只要有任一符合項被拒絕,布林結果仍為 False

預覽會使用並回滾一個巢狀圖形交易,保留呼叫端既有的交易;即使內容已還原,它仍可能使文件快取失效並觸發文件修改通知

提交

把計畫交給 ApplyLoadedPageTextReplacement,它會在圖形交易內套用請求之前重新驗證內容與字形度量指紋

內容變更後請重新計算計畫;過期的計畫會引發 EInvalidOpException,不會套用其取代

Options := THPDFLoadedTextReplacementOptions.Default;
Options.Appearance.OverflowPolicy := ltopShrinkToFit;
if PDF.PreviewLoadedPageTextReplacement(0, 'Original', NewText,
  True, Options, Plan) then
  if PDF.ApplyLoadedPageTextReplacement(Plan, Applied) then
    PDF.SaveLoadedDocument(TargetPath);