Нативное сравнение headless-документов

HPDFHeadlessCompare сравнивает два загруженных нативных документа через HPDFCompareHeadlessDocuments; callback-ABI Linux открывает ту же реализацию через hpdf_document_compare_json_v1 с type:compare

Режим PascalРежим JSONЧто сравнивается
hcmPageCountpagecountЧисло листьев дерева страниц
hcmPageTextpagetextЧисло страниц и извлечённый текст Unicode
hcmObjectCountobjectcountЧисло страниц и занятых объектов перекрёстных ссылок
hcmRenderedImagerenderedimageЧисло страниц, размеры отрисовки и нативные пиксели Cairo
hcmStructuralstructuralЧисло страниц и нормализованные графы catalog, information и недостижимых объектов
hcmFullfullЧисло страниц и объектов, нормализованные графы, текст Unicode и отрисованные пиксели

Структурная эквивалентность

Структурное сравнение разрешает косвенные ссылки и сортирует записи словарей, нормализует PDF-имена и строковые представления literal и hex, а также декодирует обычные фильтры потоков перед хешированием содержимого через SHA-256

Номера объектов, порядок сериализации и сжатие обычных потоков не влияют на структурную эквивалентность; терминальные кодирования изображений сохраняют свои политики фильтров и декодирования, а недостижимые объекты сравниваются как мультимножество

Словари шифрования и контейнеры хранения cross-reference и object-stream исключены из семантической структуры; аутентифицированное содержимое AES R5/R6 сравнивается после расшифровки с обязательным учётом права на извлечение

Структурное различие сообщает путь уровня документа $Document; подсчёт физических объектов остаётся отдельным режимом и может расходиться, когда эквивалентное содержимое хранится по-разному

Сравнение отрисовки

Каждая страница действительно отрисовывается нативным устройством Cairo с выбранным DPI; декодированные пиксели изображений накладываются на белый фон и сравниваются в RGB или по яркости

Отчёты содержат размеры, число изменившихся пикселей, максимальную дельту канала, среднюю абсолютную ошибку, долю изменившихся пикселей и похожесть; похожесть равна 1 - meanAbsoluteError / 255

Пиксель считается изменившимся, когда максимальная дельта канала превышает ColorTolerance; страница проходит проверку, только если размеры совпали, а похожесть и доля изменившихся пикселей укладываются в настроенные пороги

Для рендеринга нужны те же поддерживаемые шрифты, кодеки изображений и графическая семантика, что и для нативного рендеринга страниц; неподдерживаемая страница завершает сравнение ошибкой, а не выдаёт идентичный отчёт

Ограниченное выполнение

Опции сравнения ограничивают обход, глубину, объекты, декодированные потоки, подготовку текста, хранение результатов и отрисованные пиксели; отмена действует на обход, извлечение текста и рендеринг

На время сравнения в Pascal оба экземпляра документов должны оставаться живыми и в исключительном владении; их исходное содержимое и ресурсные опции сохраняются при успехе, сбое и отмене

Linux ABI принимает шесть указанных выше имён режимов в нижнем регистре и строгие члены options, соответствующие лимитам Pascal, плюс dpi, colorTolerance, minimumSimilarity, maxChangedPixelRatio и colorSpace:rgb или luminance

Результаты ABI полностью подготавливаются и ограничиваются до синхронной публикации в callback; вызовы с одним дескриптором и конкурентные вызовы в обратном порядке используют существующий стабильный порядок блокировок

Поля отчёта · Сравнение семантического контракта · Нативный Linux C ABI