Comparação semântica de streams de conteúdo
HPDFContentStream pode normalizar conteúdo PDF decodificado em eventos canônicos limitados e comparar esses eventos sem tratar escolhas inofensivas de serialização como mudanças
Declarações
function HPDFNormalizeContentStreamGraphicsState(
const Bytes: TBytes; out Canonical: TBytes;
out Statistics: THPDFContentSemanticStatistics;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
function HPDFCompareContentStreamsSemantic(
const Left, Right: TBytes;
out Info: THPDFContentSemanticCompareInfo;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
Normalização
- Números são quantizados pela tolerância do chamador e emitidos com ortografia independente de localidade
- Strings literais e hexadecimais comparam pelo valor de byte decodificado, enquanto arrays retêm tipo e ordem de item
- Definidores de estado gráfico e de texto atualizam um instantâneo efetivo e definidores redundantes não criam eventos
qeQmantêm uma pilha de estado completa, mas não se tornam eventos por si mesmos- Operadores
cmsucessivos são multiplicados em ordem PDF, de modo que fatorações de matriz equivalentes comparam igualmente - Cada operador retido carrega a matriz, linha, cor, gráficos externos e estado de texto efetivos que se aplicam naquele ponto
- Chaves de imagem inline são normalizadas pelo tokenizador e cargas usam identidades SHA-256 para evitar expansão de stream canônico
Diagnósticos e limites
THPDFContentSemanticStatistics relata informações de token, operação, operação de estado, estado redundante, evento normalizado, profundidade máxima de pilha, byte canônico, deslocamento de erro, validade e limite. A comparação também relata o primeiro evento normalizado diferente
Operandos de dicionário aninhado malformados, aridade inválida de operador de estado, escopos de estado gráfico sem correspondência ou não fechados, operandos finais, estouro de operação e estouro de byte canônico falham de forma segura e nunca relatam equivalência
Passe bytes de conteúdo decodificado. A decodificação de filtro de stream e a reconciliação de nomes de recursos entre dicionários de recursos diferentes permanecem responsabilidade do chamador