FPdfDiff は CompareWith で使うページの対応付け、UTF-16 テキスト差分、連結した視覚差分領域を実装します
AlignPdfDiffPages は上限付きの最長共通部分列で、テキスト、形状、視覚フィンガープリントが完全に一致するページを対応付けます。残った完全一致を移動として識別し、未対応の区間を変更として組み合わせます
重複ページの対応は決定的です。ただし移動と変更が同時に起きたページを、必ず移動として識別できるとは限りません
BuildPdfDiffTextChanges は 0 始まりの UTF-16 オフセットと長さを返します。文字モードはサロゲートペアを分割せず、単語モードは空白とそれ以外の文字を別にまとめます
BuildPdfDiffPixelRegions は連結した変更タイルを、右端と下端を含まないピクセル矩形にまとめます。タイル内の変更されていないピクセルが領域に含まれる場合もあります
対応付けは片側最大 4,096 ページ、16,777,216 セルまでです。テキストは最大 65,536 トークン、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;