PDFium Delphi Component Docs

有資源上限的 PDF 比較輔助功能

FPdfDiff 實作 CompareWith 使用的頁面對齊、UTF-16 文字差異與連通視覺區域

AlignPdfDiffPages 透過有資源上限的最長共同子序列,配對文字、幾何與視覺指紋完全相符的頁面,再將剩餘的完全匹配辨識為移動,將未匹配的空段配對為修改

重複頁面的配對結果可重現;同時移動又修改的頁面不保證能辨識為移動

BuildPdfDiffTextChanges 回報從零起算的 UTF-16 位移與長度;字元模式不拆開代理字元對,詞語模式則將空白與其他字元分別分組

BuildPdfDiffPixelRegions 將相連的變更方塊組成右邊界/下邊界不包含在內的像素矩形;區域內也可能包含方塊中未變更的像素

對齊每側最多接受 4,096 頁及 16,777,216 個儲存格;文字最多接受 65,536 個 Token 與 16,777,216 個 UTF-16 單位,選定的詳細資料預算耗盡時會明確標示截斷

公開宣告

type
  TPdfDiffPageKind= (dpkMatched, dpkModified, dpkMoved, dpkInserted, dpkDeleted);
  TPdfDiffTextMode= (dtmNone, dtmCharacters, dtmWords);
  TPdfDiffPageSignature= record
    Text: WideString;
    VisualHash: UInt64;
    Width, Height: Single;
    Rotation: Integer;
  end;
  TPdfDiffPageSignatures= array of TPdfDiffPageSignature;
  TPdfDiffPagePair= record
    LeftPageIndex, RightPageIndex: Integer;
    Kind: TPdfDiffPageKind;
  end;
  TPdfDiffPagePairs= array of TPdfDiffPagePair;
  // Offsets and lengths count UTF-16 code units, starting at zero
  TPdfDiffTextChange= record
    LeftStart, LeftLength, RightStart, RightLength: Integer;
  end;
  TPdfDiffTextChanges= array of TPdfDiffTextChange;
  TPdfDiffPixelRegion= record
    Left, Top, Right, Bottom: Integer;
  end;
  TPdfDiffPixelRegions= array of TPdfDiffPixelRegion;

function AlignPdfDiffPages(const Left, Right: TPdfDiffPageSignatures;
  MaxCells: Integer): TPdfDiffPagePairs;
function BuildPdfDiffTextChanges(const Left, Right: WideString;
  Mode: TPdfDiffTextMode; MaxCells, MaxTokens: Integer;
  out Truncated: Boolean): TPdfDiffTextChanges;
function BuildPdfDiffPixelRegions(const Mask: TBytes; Width, Height,
  TileSize, MaxRegions: Integer; out Truncated: Boolean): TPdfDiffPixelRegions;