Comparación de documentos JSON y C ABI

Compara dos documentos cargados mediante THPDFJobProcessor.ExecuteLoadedOperationWithComparison, dos handles de la C ABI mediante hpdf_document_compare_json_v1 o dos archivos mediante el procesador de jobs JSON

Modos genéricos

type=compare acepta valores de mode pageCount, pageText, objectCount, renderedImage, full y structural; el default es structural

Los modos conservan el comportamiento nativo de THPDFDocComparison, incluida la alineación de páginas y las firmas estructurales de objetos; objectCount también compara 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 de resultado incluye comparison, comparisonComplete, identical, documentUpdated=false, tiempo transcurrido y tamaño de salida; la salida binaria opcional contiene el JSON de comparación sin su envelope

Los límites de traversal, streams, valores, diferencias retenidas y rendering producen status=incomplete, comparisonComplete=false e identical=false, incluso cuando el subconjunto inspeccionado es igual

Revisión de contratos

type=compare.contract alinea párrafos, detecta movimientos y reporta inserciones, eliminaciones y reemplazos de palabras u oraciones con ambos 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 default, 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 son con base cero, los inicios de carácter son posiciones UTF-16 con base uno, y los rectángulos cubren líneas semánticas en user space del 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, agrega highlights y comentarios Before/After, guarda una copia de revisión y siempre hace rollback de la transacción del graph fuente

Un PDF de revisión es una reescritura completa y exige verificación de firmas separada; la comparación deja los documentos fuente prestados y sus firmas sin cambios

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 filesystem

Las options de contrato aceptan los campos booleanos, de margen, similitud, boilerplate y 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 esos presupuestos

Los presupuestos de memoria asignan allowances conservadores para ambos paths de decodificación, píxeles de rendering, almacenamiento de alineación y salida privada; son límites de workload más que un tope de RSS del sistema operativo, y los object graphs ya cargados siguen siendo propiedad del caller

La asignación JSON se comprueba con una estimación conservadora de tamaño escapado, que puede rechazar un resultado cuya representación UTF-8 final sí cabría; HTML usa un allowance conservador de caracteres dentro del presupuesto de bytes de salida

Los fallos de presupuesto devuelven status ABI 8 y la cancelación devuelve status 4; la cancelación es cooperativa en los límites de página, objeto, bloque de stream, objeto de rendering, fila de píxeles y alineación

El envelope de control de errores de la 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 reportar un error de presupuesto cuando el presupuesto de resultado solicitado es demasiado pequeño para una respuesta de error

Handles prestados de la 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 records v1 de la ABI y la exportación de ejecución original siguen sin cambios

operation.input_io debe ser NULL, result_io debe proveer escritura, y un output_io opcional suministra el artifact; las claves JSON de archivo input, otherInput y output se rechazan

Ambas fuentes independientes pueden devolver lecturas random-access cortas, y ambos callbacks de cancelación se consultan por polling incluso cuando sus objetos decodificados están en caché; el mismo handle puede suministrarse dos veces para 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 a handles se retienen hasta que la comparación devuelve

Los artifacts se construyen y validan en buffers privados acotados antes de la publicación por callback; los callbacks que fallan durante la publicación pueden retener bytes ya aceptados, mientras los documentos fuente quedan sin cambios

File jobs

{"operations":[{"type":"compare.contract","input":"before.pdf",
  "otherInput":"after.pdf","format":"html","output":"review.html"}]}

password y otherPassword desbloquean independientemente los dos archivos; la salida JSON puede omitir un path de salida y quedarse en el envelope de resultado

Los paths de salida deben diferir de ambos archivos fuente, incluidos los alias hard-link existentes; un archivo temporal en el directorio de destino se hace flush y se publica atómicamente cuando todas las comprobaciones pasan, preservando una salida existente ante fallos

Temas relacionados

Comparación de documentos · Comparación de contratos · Exportación anotada a stream