JSON ve C ABI belge karşılaştırması

İki yüklenmiş belgeyi THPDFJobProcessor.ExecuteLoadedOperationWithComparison ile, iki C ABI handle'ını hpdf_document_compare_json_v1 ile veya iki dosyayı JSON iş işlemcisiyle karşılaştırın

Genel mode'lar

type=compare, pageCount, pageText, objectCount, renderedImage, full ve structural mode value'larını kabul eder; default structural'dır

Mode'lar, native THPDFDocComparison davranışını korur — sayfa alignment'ı ve structural object signature'ları dâhil; objectCount ayrıca sayfa ve object yapısını karşılaştırır

{
  "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}
}

Result zarfı, comparison'ı, comparisonComplete'ı, identical'ı, documentUpdated=false'u, geçen süreyi ve output boyutunu içerir; opsiyonel binary output, comparison JSON'u zarfı olmadan içerir

Traversal, stream, value, tutulan-fark ve rendering limitleri, incelenen alt küme eşit olsa bile status=incomplete, comparisonComplete=false ve identical=false üretir

Contract incelemesi

type=compare.contract, paragraph'ları hizalar, hareketi tespit eder ve kelime veya cümle eklemelerini, silmelerini ve replacement'larını her iki context ve konumla raporlar

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

format, json, html veya pdf kabul eder; JSON default'tur ve HTML veya PDF, bir output stream'i veya callback gerektirir

Değişiklik türleri insert, delete, replace ve move'dur; sayfa ve paragraph indeksleri zero-based, character başlangıçları one-based UTF-16 konumlarıdır ve dikdörtgenler, kesin glyph dörtgenleri yerine PDF user space'te semantik satırları kapsar

PDF, side=before veya side=after seçer, seçilen belgeyi her semantik sayfa snapshot'ına karşı doğrular, highlight'lar ve Before/After comment'leri ekler, bir inceleme kopyası kaydeder ve kaynak graf transaction'ını her zaman geri alır

İnceleme PDF'i tam bir yeniden yazımdır ve ayrı signature verification gerektirir; comparison, ödünç alınan kaynak belgeleri ve imzalarını değiştirmeden bırakır

Options ve sınırlar

Genel options, maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes ve maxPathBytes kabul eder

Rendering, dpi, colorSpace (rgb veya luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize ve maxChangedRegions kabul eder; callback operation'ları heatmap'leri dosya sistemine yazmaz

Contract options, THPDFContractCompareOptions'tan boolean, margin, similarity, boilerplate ve kaynak alanlarını camelCase adlarla kabul eder; granularity word veya sentence'tır

Paylaşılan bütçeler, memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount ve pageCount'tır; option'lar bu bütçelere clamped edilir

Bellek bütçeleri, her iki decode path'i, rendering pikselleri, alignment depolaması ve private output için muhafazakâr ödeneğler tahsis eder; işletim-sistemi RSS sınırı değil workload limitleridirler ve zaten-yüklenmiş object grafikleri çağıranın mülkiyetinde kalır

JSON tahsisi, muhafazakâr bir escaped-boyut tahminiyle denetlenir — eventual UTF-8 temsili sığacak bir result'ı reddedebilir; HTML, output-byte bütçesi içinde muhafazakâr bir character ödeneği kullanır

Bütçe başarısızlıkları ABI status 8 döndürür ve cancellation status 4 döndürür; cancellation, sayfa, object, stream-block, rendering-object, piksel-row ve alignment sınırlarında cooperative'tır

C ABI hata kontrol zarfı, bağımsız bir 8 KiB maksimuma sahiptir ve detayı 1.024 UTF-16 code unit'e kısaltır — istenen result bütçesi bir hata response'u için fazla küçükken bütçe hatasının raporlanmasına izin vererek

Ödünç C ABI handle'ları

Her handle'ı kendi hpdf_io_v1 kaynağıyla yükleyin ve hpdf_document_compare_json_v1(handle_a, handle_b, operation) çağırın; ABI v1 record layout'ları ve orijinal execute export'u değişmeden kalır

operation.input_io NULL olmalı, result_io write sağlamalı ve opsiyonel output_io artefaktı sağlar; JSON file key'leri input, otherInput ve output reddedilir

Her iki bağımsız kaynak, kısa random-access okumalar döndürebilir ve her iki cancellation callback'i, decoded object'leri cache'lenmiş olsa bile poll edilir; aynı handle, self comparison için iki kez sağlanabilir

Input callback'leri ve context'lerini handle lifetime'ı ve aktif çağrılar için canlı tutun ve her handle'da operation'ları serialize edin; handle referansları, comparison dönene kadar tutulur

Artefaktlar, callback yayımından önce private sınırlı buffer'larda kurulur ve doğrulanır; yayım sırasında başarısız olan callback'ler zaten kabul edilmiş baytları tutabilirken, kaynak belgeler değişmeden kalır

Dosya işleri

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

password ve otherPassword, iki dosyayı bağımsız açar; JSON output, bir output path atlayabilir ve result zarfında kalabilir

Output path'leri, mevcut hard-link alias'ları dâhil her iki kaynak dosyadan farklı olmalıdır; hedef dizindeki geçici bir dosya, tüm denetimler geçtikten sonra flush edilir ve atomik yayımlanır — başarısızlıkta mevcut output'u koruyarak

İlgili konular

Belge karşılaştırması · Contract karşılaştırması · Anote edilmiş stream export'u