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