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