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