FPdfDiff implementeert pagina-uitlijning, UTF-16-tekstwijzigingen en verbonden visuele regio's, gebruikt door CompareWith
AlignPdfDiffPages koppelt exacte tekst-, geometrie- en visuele vingerdrukken via een begrensde longest common subsequence, markeert resterende exacte treffers als verplaatsingen en koppelt niet-gepaarde gaten als wijzigingen
Dubbele pagina's worden deterministisch gepaard; een pagina die tegelijk verplaatst en wijzigt wordt niet gegarandeerd als verplaatsing herkend
BuildPdfDiffTextChanges rapporteert nulgebaseerde UTF-16-offsets en -lengten; tekenmodus houdt surrogaatparen bij elkaar en woordmodus groepeert witruimte apart van andere tekens
BuildPdfDiffPixelRegions groepeert verbonden gewijzigde tegels tot pixelrechthoeken met exclusieve rechter- en onderrand; deze regio's kunnen ongewijzigde pixels binnen een tegel bevatten
Uitlijning accepteert maximaal 4,096 pagina's per zijde en 16,777,216 cellen; tekst accepteert maximaal 65,536 tokens en 16,777,216 UTF-16-eenheden, met expliciete afkapping zodra de gekozen detailbudgetten uitgeput zijn
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;