FPdfDiff implementuje párování stránek, změny textu UTF-16 a souvislé oblasti vizuálních změn používané CompareWith
AlignPdfDiffPages spáruje přesné otisky textu, geometrie a obrazu pomocí nejdelší společné podposloupnosti s omezenými nároky; zbývající přesné shody označí jako přesuny a nespárované mezery propojí jako změny
Duplicitní stránky se párují deterministicky; stránka, která se zároveň přesune a změní, nemusí být rozpoznána jako přesun
BuildPdfDiffTextChanges hlásí offsety a délky UTF-16 od nuly; znakový režim drží surrogate páry pohromadě a slovní režim sdružuje whitespace odděleně od ostatních znaků
BuildPdfDiffPixelRegions sdružuje propojené změněné dlaždice do pixelových obdélníků s nezahrnutým pravým a dolním okrajem; oblasti mohou obsahovat i nezměněné pixely uvnitř dlaždice
Párování přijímá nejvýše 4,096 stránek na každé straně a 16,777,216 buněk; text nejvýše 65,536 tokenů a 16,777,216 jednotek UTF-16, s explicitním zkrácením při vyčerpání zvolených rozpočtů detailů
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;