Comparación de documentos por JSON y C ABI
Compara dos documentos cargados mediante THPDFJobProcessor.ExecuteLoadedOperationWithComparison, dos handles del C ABI mediante hpdf_document_compare_json_v1 o dos ficheros mediante el procesador de trabajos JSON
Modos genéricos
type=compare acepta valores de mode pageCount, pageText, objectCount, renderedImage, full y structural; el valor por defecto es structural
Los modos conservan el comportamiento nativo de THPDFDocComparison, incluida la alineación de páginas y las firmas estructurales de objetos; objectCount compara además la estructura de páginas y objetos
{
"schemaVersion": 1,
"type": "compare",
"mode": "full",
"render": {"dpi": 72, "colorSpace": "rgb", "colorTolerance": 8},
"options": {"maxDifferences": 1000, "maxStreamBytes": 1048576},
"budget": {"memoryBytes": 268435456, "resultBytes": 16777216,
"outputBytes": 67108864, "timeMilliseconds": 60000, "pixels": 10000000}
}
El envelope del resultado incluye comparison, comparisonComplete, identical, documentUpdated=false, el tiempo transcurrido y el tamaño de salida; la salida binaria opcional contiene el JSON de comparación sin su envelope
Los límites de recorrido, de streams, de valores, de diferencias retenidas y de rendering producen status=incomplete, comparisonComplete=false y identical=false, incluso cuando el subconjunto inspeccionado es igual
Revisión de contratos
type=compare.contract alinea párrafos, detecta movimientos e informa de inserciones, eliminaciones y reemplazos de palabras u oraciones con sus contextos y ubicaciones
{
"schemaVersion": 1,
"type": "compare.contract",
"format": "pdf",
"side": "after",
"options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
"excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}
format acepta json, html o pdf; JSON es el valor por defecto, y HTML o PDF exigen un stream o callback de salida
Los tipos de cambio son insert, delete, replace y move; los índices de página y párrafo parten de cero, los inicios de carácter son posiciones UTF-16 que parten de uno, y los rectángulos cubren líneas semánticas en espacio de usuario PDF en lugar de cuadriláteros exactos de glifos
PDF selecciona side=before o side=after, verifica el documento elegido contra cada snapshot semántico de página, añade resaltados y comentarios Before/After, guarda una copia de revisión y siempre hace rollback de la transacción del grafo de origen
Un PDF de revisión es una reescritura completa y exige verificación de firmas aparte; la comparación deja los documentos de origen prestados y sus firmas intactos
Opciones y límites
Las options genéricas aceptan maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes y maxPathBytes
El rendering acepta dpi, colorSpace (rgb o luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize y maxChangedRegions; las operaciones con callback no escriben heatmaps al sistema de ficheros
Las options de contrato aceptan los campos booleanos, de margen, de similitud, de boilerplate y de recursos de THPDFContractCompareOptions, con nombres camelCase; granularity es word o sentence
Los presupuestos compartidos son memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount y pageCount; las opciones se recortan a estos presupuestos
Los presupuestos de memoria reservan márgenes conservadores para ambas rutas de decodificación, los píxeles de rendering, el almacenamiento de alineación y la salida privada; son límites de carga de trabajo, no un techo de RSS del sistema operativo, y los grafos de objetos ya cargados siguen siendo propiedad del llamador
La asignación JSON se comprueba con una estimación conservadora del tamaño con escapes, que puede rechazar un resultado cuya representación UTF-8 final sí cabría; HTML usa un margen conservador de caracteres dentro del presupuesto de bytes de salida
Los fallos de presupuesto devuelven el estado ABI 8 y la cancelación el estado 4; la cancelación es cooperativa en los bordes de página, objeto, bloque de stream, objeto de rendering, fila de píxeles y alineación
El envelope de control de errores del C ABI tiene un máximo independiente de 8 KiB y trunca el detalle a 1024 unidades de código UTF-16, lo que permite informar de un error de presupuesto cuando el presupuesto de resultado solicitado es demasiado pequeño para una respuesta de error
Handles prestados del C ABI
Carga cada handle con su propia fuente hpdf_io_v1 y llama a hpdf_document_compare_json_v1(handle_a, handle_b, operation); los layouts de registros del ABI v1 y el export original de ejecución permanecen intactos
operation.input_io debe ser NULL, result_io debe proporcionar escritura y el output_io opcional aporta el artefacto; las claves JSON de fichero input, otherInput y output se rechazan
Ambas fuentes independientes pueden devolver lecturas aleatorias cortas, y ambos callbacks de cancelación se sondean incluso cuando sus objetos decodificados están en caché; el mismo handle puede suministrarse dos veces para una autocomparación
Mantén vivos los callbacks de entrada y sus contextos durante la vida del handle y las llamadas activas, y serializa las operaciones sobre cada handle; las referencias al handle se retienen hasta que la comparación devuelva
Los artefactos se construyen y validan en buffers privados acotados antes de publicarse por callback; los callbacks que fallan durante la publicación pueden retener los bytes ya aceptados, mientras que los documentos de origen quedan intactos
Trabajos de fichero
{"operations":[{"type":"compare.contract","input":"before.pdf",
"otherInput":"after.pdf","format":"html","output":"review.html"}]}
password y otherPassword desbloquean de forma independiente los dos ficheros; la salida JSON puede omitir la ruta de salida y quedarse en el envelope del resultado
Las rutas de salida deben diferir de ambos ficheros de origen, incluidos los alias existentes por hard link; un fichero temporal del directorio destino se vuelca y se publica atómicamente cuando todas las comprobaciones pasan, conservando una salida existente en caso de fallo
Temas relacionados
Comparación de documentos · Comparación de contratos · Export anotado a stream