Нативное сравнение headless-документов
HPDFHeadlessCompare сравнивает два загруженных нативных документа через HPDFCompareHeadlessDocuments; callback-ABI Linux открывает ту же реализацию через hpdf_document_compare_json_v1 с type:compare
| Режим Pascal | Режим JSON | Что сравнивается |
|---|---|---|
| hcmPageCount | pagecount | Число листьев дерева страниц |
| hcmPageText | pagetext | Число страниц и извлечённый текст Unicode |
| hcmObjectCount | objectcount | Число страниц и занятых объектов перекрёстных ссылок |
| hcmRenderedImage | renderedimage | Число страниц, размеры отрисовки и нативные пиксели Cairo |
| hcmStructural | structural | Число страниц и нормализованные графы catalog, information и недостижимых объектов |
| hcmFull | full | Число страниц и объектов, нормализованные графы, текст 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