Comparação de documentos por JSON e ABI C

Compare dois documentos carregados através de THPDFJobProcessor.ExecuteLoadedOperationWithComparison, dois handles da ABI C através de hpdf_document_compare_json_v1, ou dois ficheiros através do processador de trabalhos JSON

Modos genéricos

type=compare aceita valores mode de pageCount, pageText, objectCount, renderedImage, full e structural; o default é structural

Os modos mantêm o comportamento nativo THPDFDocComparison, incluindo alinhamento de páginas e assinaturas estruturais de objetos; objectCount também compara a estrutura de páginas e de 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}
}

O envelope de resultados inclui comparison, comparisonComplete, identical, documentUpdated=false, tempo decorrido e tamanho de saída; a saída binária opcional contém o JSON de comparação sem o envelope dele

Limites de travessia, streams, valores, diferenças retidas e renderização produzem status=incomplete, comparisonComplete=false e identical=false, mesmo quando o subconjunto inspecionado é igual

Revisão de contratos

type=compare.contract alinha parágrafos, deteta movimentos e reporta inserções, eliminações e substituições de palavras ou frases com contextos e localizações de ambos os lados

{
  "schemaVersion": 1,
  "type": "compare.contract",
  "format": "pdf",
  "side": "after",
  "options": {"granularity": "word", "ignoreRepeatedHeadersFooters": true,
              "excludedLineTexts": ["CONFIDENTIAL COPY"], "maxWorkUnits": 50000000}
}

format aceita json, html ou pdf; JSON é o default, e HTML ou PDF exige uma stream de saída ou um callback

Os tipos de alterações são insert, delete, replace e move; os índices de páginas e de parágrafos têm base zero, os inícios de carateres são posições UTF-16 com base um, e os retângulos cobrem linhas semânticas no espaço de utilizador PDF em vez de quadriláteros exatos de glyphs

PDF seleciona side=before ou side=after, verifica o documento selecionado contra o snapshot de todas as páginas semânticas, acrescenta destaques e comentários Before/After, grava uma cópia de revisão e faz sempre rollback da transação do grafo da fonte

Um PDF de revisão é uma reescrita completa e exige verificação de assinaturas separada; a comparação deixa os documentos fonte emprestados e as assinaturas deles inalterados

Opções e limites

options genéricas aceita maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes e maxPathBytes

A renderização aceita dpi, colorSpace (rgb ou luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize e maxChangedRegions; operações por callbacks não escrevem heatmaps no sistema de ficheiros

options de contratos aceita os campos booleanos, de margens, de similaridade, de boilerplate e de recursos de THPDFContractCompareOptions, usando nomes camelCase; granularity é word ou sentence

Os orçamentos partilhados são memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount e pageCount; as opções são limitadas a estes orçamentos

Os orçamentos de memória alocam quotas conservadoras para ambos os caminhos de descodificação, píxeis renderizados, armazenamento de alinhamentos e saída privada; são limites de carga de trabalho, e não um teto de RSS do sistema operativo, e os grafos de objetos já carregados permanecem próprios de quem chama

A alocação JSON é verificada com uma estimativa conservadora de tamanho com escape, que pode rejeitar um resultado cuja representação UTF-8 eventual caberia; HTML usa uma quota conservadora de carateres dentro do orçamento de bytes de saída

Falhas de orçamento devolvem status de ABI 8 e cancelamento devolve status 4; o cancelamento é cooperativo nas fronteiras de páginas, objetos, blocos de streams, objetos renderizados, linhas de píxeis e alinhamentos

O envelope de controlo de erros da ABI C tem um máximo independente de 8 KiB e trunca os detalhes a 1,024 unidades de código UTF-16, permitindo que um erro de orçamento seja reportado quando o orçamento de resultados pedido é demasiado pequeno para uma resposta de erro

Handles emprestados da ABI C

Carregue cada handle com a fonte hpdf_io_v1 própria dele e chame hpdf_document_compare_json_v1(handle_a, handle_b, operation); os layouts de registos ABI v1 e a exportação original de execute permanecem inalterados

operation.input_io tem de ser NULL, result_io tem de fornecer escrita, e o output_io opcional fornece o artefacto; chaves JSON de ficheiros input, otherInput e output são rejeitadas

Ambas as fontes independentes podem devolver leituras curtas de acesso aleatório, e ambos os callbacks de cancelamento são consultados mesmo quando os objetos descodificados deles estão em cache; o mesmo handle pode ser fornecido duas vezes para comparação de um documento consigo próprio

Mantenha os callbacks de entrada e os contextos deles vivos durante o tempo de vida do handle e as chamadas ativas, e serialize operações sobre cada handle; as referências de handles são retidas até a comparação devolver

Os artefactos são construídos e validados em buffers privados delimitados antes da publicação por callbacks; callbacks que falhem durante a publicação podem reter bytes já aceites, enquanto os documentos fonte permanecem inalterados

Trabalhos de ficheiros

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

password e otherPassword desbloqueiam de forma independente os dois ficheiros; a saída JSON pode omitir um caminho de saída e permanecer no envelope de resultados

Os caminhos de saída têm de diferir de ambos os ficheiros fonte, incluindo aliases existentes de hard links; um ficheiro temporário no diretório de destino recebe flush e é publicado atomicamente depois de todas as verificações passarem, preservando uma saída existente em caso de falha

Tópicos relacionados

Comparação de documentos · Comparação de contratos · Exportação de streams anotadas