Comparación semántica de flujos de contenido
HPDFContentStream puede normalizar contenido PDF decodificado en eventos canónicos acotados y comparar esos eventos sin tratar las elecciones de serialización inofensivas como cambios
Declaraciones
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;
Normalización
- Los números se cuantizan según la tolerancia del llamador y se emiten con ortografía independiente de la configuración regional
- Las cadenas literales y hexadecimales se comparan por su valor de byte decodificado, mientras que las matrices conservan el tipo y el orden de sus elementos
- Los establecedores de estado gráfico y de texto actualizan una instantánea efectiva y los establecedores redundantes no crean eventos
qyQmantienen una pila de estado completa pero no se convierten en eventos por sí mismos- Los operadores
cmsucesivos se multiplican en orden de PDF, de modo que las factorizaciones de matriz equivalentes se comparan de forma igual - Cada operador conservado lleva la matriz, la línea, el color, los gráficos externos y el estado de texto efectivos que se aplican en ese punto
- Las claves de imagen en línea se normalizan mediante el tokenizador y las cargas útiles usan identidades SHA-256 para evitar la expansión del flujo canónico
Diagnósticos y límites
THPDFContentSemanticStatistics informa de token, operación, operación de estado, estado redundante, evento normalizado, profundidad máxima de pila, byte canónico, desplazamiento de error, validez e información de límites. La comparación también informa del primer evento normalizado que difiere
Los operandos de diccionario anidado malformados, la aridad no válida de operadores de estado, los ámbitos de estado gráfico sin emparejar o sin cerrar, los operandos finales, el desbordamiento de operaciones y el desbordamiento de bytes canónicos fallan de forma cerrada y nunca informan de equivalencia
Pase los bytes de contenido decodificados. La decodificación de filtros de flujo y la conciliación de nombres de recursos entre distintos diccionarios de recursos siguen siendo responsabilidad del llamador