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;