Porównywanie dokumentów JSON i C ABI

Porównaj dwa wczytane dokumenty przez THPDFJobProcessor.ExecuteLoadedOperationWithComparison, dwa uchwyty C ABI przez hpdf_document_compare_json_v1 albo dwa pliki przez procesor zadań JSON

Tryby ogólne

type=compare przyjmuje wartości mode pageCount, pageText, objectCount, renderedImage, full i structural; domyślny to structural

Tryby zachowują natywne zachowanie THPDFDocComparison, włącznie z wyrównywaniem stron i strukturalnymi sygnaturami obiektów; objectCount porównuje tež strukturę stron i obiektów

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

Koperta wyniku obejmuje comparison, comparisonComplete, identical, documentUpdated=false, upływ czasu i rozmiar wyjścia; opcjonalne wyjście binarne zawiera JSON porównania bez koperty

Limity przechodzenia, strumieni, wartości, zachowanych różnic i renderowania dają status=incomplete, comparisonComplete=false i identical=false, nawet gdy sprawdzony podzbiór jest równy

Przegląd umów

type=compare.contract wyrównuje akapity, wykrywa przenoszenia i raportuje wstawienia, usunięcia i podmiany słów albo zdań z oboma kontekstami i lokalizacjami

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

format przyjmuje json, html albo pdf; JSON jest domyślny, a HTML albo PDF wymaga strumienia wyjścia albo callbacka

Rodzaje zmian to insert, delete, replace i move; indeksy stron i akapitów są od zera, początki znaków to pozycje UTF-16 od jednego, a prostokąty pokrywają linie semantyczne w przestrzeni użytkownika PDF, a nie dokładne czworokąty glifów

PDF wybiera side=before albo side=after, weryfikuje wybrany dokument względem każdego semantycznego snapshotu strony, dodaje podświetlenia i komentarze Before/After, zapisuje kopię przeglądu i zawsze wycofuje transakcję grafu źródła

PDF przeglądu to pełny zapis od nowa i wymaga osobnej weryfikacji podpisów; porównanie pozostawia pożyczone dokumenty źródła i ich podpisy niezmienione

Opcje i granice

Ogólne options przyjmują maxObjects, maxEdges, maxPages, maxDepth, maxDifferences, maxStreamBytes, maxTotalStreamBytes, maxValueBytes i maxPathBytes

Renderowanie przyjmuje dpi, colorSpace (rgb albo luminance), colorTolerance, minimumSimilarity, maxChangedPixelRatio, tileSize i maxChangedRegions; operacje callback nie zapisują map cieplnych do systemu plików

options umowy przyjmują pola Boolean, marginesów, podobieństwa, boilerplate i zasobów z THPDFContractCompareOptions, używając nazw camelCase; granularity jest word albo sentence

Współdzielone budżety to memoryBytes, outputBytes, resultBytes, timeMilliseconds, pixels, objectCount i pageCount; opcje są przycinane do tych budżetów

Budżety pamięci alokują konserwatywne pule dla obu ścieżek dekodowania, pikseli renderowania, przechowywania wyrównań i prywatnego wyjścia; to limity obciążenia, a nie kap RSS systemu operacyjnego, a już wczytane grafy obiektów pozostają własnością wywołującego

Alokacja JSON jest sprawdzana konserwatywnym szacunkiem rozmiaru po eskapowaniu, który może odrzucić wynik, którego docelowa reprezentacja UTF-8 zmieściłaby się; HTML używa konserwatywnej puli znaków w budżecie bajtów wyjścia

Niepowodzenia budżetu zwracają status ABI 8, a anulowanie status 4; anulowanie jest kooperatywne na granicach stron, obiektów, bloków strumieni, obiektów renderowania, wierszy pikseli i wyrównań

Koperta kontroli błędów C ABI ma niezależne maksimum 8 KiB i ucina szczegóły do 1,024 jednostek kodu UTF-16, pozwalając raportować błąd budżetu, gdy żądany budżet wyniku jest za mały dla odpowiedzi błędu

Pożyczone uchwyty C ABI

Wczytaj każdy uchwyt jego własnym źródłem hpdf_io_v1 i wywołaj hpdf_document_compare_json_v1(handle_a, handle_b, operation); layouty rekordów ABI v1 i oryginalny eksport execute pozostają niezmienione

operation.input_io musi być NULL, result_io musi dostarczać write, a opcjonalne output_io dostarcza artefakt; klucze plikowe JSON input, otherInput i output są odrzucane

Oba niezależne źródła mogą zwracać krótkie odczyty dostępu swobodnego, a oba callbacki anulowania są odpytywane nawet, gdy ich zdekodowane obiekty są w cache; ten sam uchwyt może być dostarczony dwukrotnie dla porównania ze sobą

Utrzymuj callbacki wejścia i ich konteksty żywe przez czas życia uchwytu i aktywne wywołania i szereguj operacje na każdym uchwycie; referencje uchwytów są zachowywane do powrotu porównania

Artefakty są budowane i walidowane w prywatnych ograniczonych buforach przed publikacją callback; callbacki zawodzące podczas publikacji mogą zachować już przyjęte bajty, podczas gdy dokumenty źródła pozostają niezmienione

Joby plikowe

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

password i otherPassword niezależnie odblokowują oba pliki; wyjście JSON może pominąć ścieżkę wyjścia i pozostać w kopercie wyniku

Ścieżki wyjścia muszą różnić się od obu plików źródła, włącznie z istniejącymi aliasami twardych dowiązań; tymczasowy plik w katalogu docelowym jest flushowany i atomowo publikowany po przejściu wszystkich kontroli, zachowując istniejące wyjście przy niepowodzeniu

Powiązane tematy

Porównywanie dokumentów · Porównywanie umów · Eksport strumienia z adnotacjami