FPdfDiff implementuje wyrównywanie stron, zmiany tekstu UTF-16 i połączone regiony wizualne używane przez CompareWith
AlignPdfDiffPages paruje dokładne odciski palców tekstu, geometrii i obrazu za pomocą ograniczonego najdłuższego wspólnego podciągu, a następnie identyfikuje pozostałe dokładne dopasowania jako przeniesienia i paruje niedopasowane luki jako modyfikacje
Zduplikowane strony są parowane deterministycznie; strony przeniesione i jednocześnie zmienione nie mają gwarancji rozpoznania jako przeniesienie
BuildPdfDiffTextChanges raportuje offsety i długości UTF-16 liczone od zera; tryb znakowy trzyma pary surogatowe razem, a tryb słowny grupuje białe znaki oddzielnie od pozostałych znaków
BuildPdfDiffPixelRegions grupuje połączone zmienione kafle w prostokąty pikselowe z wyłączną prawą/dolną krawędzią; regiony te mogą zawierać niezmienione piksele wewnątrz kafla
Wyrównanie akceptuje co najwyżej 4,096 stron na stronę i 16,777,216 komórek; tekst akceptuje co najwyżej 65,536 tokenów i 16,777,216 jednostek UTF-16, z jawnym obcięciem, gdy wyczerpią się wybrane budżety szczegółowości
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;