FPdfDiff implementa o alinhamento de páginas, as alterações de texto UTF-16 e as regiões visuais conectadas usados pelo CompareWith
AlignPdfDiffPages emparelha texto exato, geometria e impressões visuais através de uma subsequência comum mais longa com limites definidos; de seguida identifica as correspondências exatas restantes como movimentos e emparelha as lacunas sem correspondência como modificações
Páginas duplicadas são emparelhadas de forma determinística; uma página que se move e muda ao mesmo tempo não tem garantia de ser identificada como movimento
BuildPdfDiffTextChanges comunica offsets e comprimentos UTF-16 de base zero; o modo por caractere mantém os pares surrogate juntos e o modo por palavra agrupa os espaços em branco separadamente dos restantes caracteres
BuildPdfDiffPixelRegions agrupa mosaicos alterados conectados em retângulos de píxeis com borda direita/inferior exclusiva; estas regiões podem incluir píxeis inalterados dentro de um mosaico
O alinhamento aceita no máximo 4,096 páginas por lado e 16,777,216 células; o texto aceita no máximo 65,536 tokens e 16,777,216 unidades UTF-16, com truncamento explícito quando os orçamentos de detalhe escolhidos se esgotam
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;