Versioned JSON для графа объектов: туда и обратно

HotPDF умеет стримить полный граф загруженных indirect-объектов в versioned JSON и восстанавливать из него редактируемый документ, не превращая значения PDF в описание задачи

Схема и совместимость

Текущая схема HotPDF-object-graph-2 записывает schemaVersion, minimumReaderVersion, версию PDF, ссылки trailer Root и Info, каждый выбранный indirect-объект, идентификаторы удалённых объектов и вид — snapshot или incremental

Для совместимости reader принимает более ранний формат HotPDF-object-graph-1 и отклоняет будущие или несовместимые версии схемы до того, как тронет целевой документ

Для редактирования с полным циклом туда-обратно используйте stream API v2, потому что только v2 записывает, являются данные stream payload сырыми отфильтрованными или уже декодированными

Streaming и бинарные payload

ExportLoadedObjectGraphJSONToStream пишет объекты и рекурсивно упорядоченные значения PDF прямо в выходной stream, не собирая JSON-строку размером с документ

Сырые или декодированные байты stream можно опустить, встроить как chunked base64 или записать sidecar-файлами в указанном каталоге

Имена sidecar — безопасные имена листьев, публикация выполняется через соседний временный файл с последующей атомарной заменой, а импорт отклоняет traversal- и абсолютные пути

Importer читает вход блоками фиксированного размера и материализует за раз только одну запись top-level объекта, соблюдая лимиты на байты JSON, количество и номер объектов, глубину значений, байты строк, отдельные stream и суммарные байты stream

Режимы snapshot и incremental

Snapshot экспортирует полный граф, а ogjimReplace валидирует документ-кандидат перед подменой целевого

Инкрементальный экспорт содержит только dirty-, must-write- и удалённые объекты; ogjimUpdate проверяет ссылки на объединении существующего графа и дельты, а затем коммитит через механизм транзакций загруженного графа

Любое повреждённое значение, неразрешённая ссылка, невалидное дерево Catalog или Pages, несогласованная длина direct- или indirect-stream, исчерпанный бюджет или неудачное чтение sidecar оставляют целевой документ нетронутым

Граница безопасности

JSON-граф содержит объекты PDF и связи trailer Root и Info, но никогда не экспортирует пароли, ключи шифрования или активное состояние security handler

Поэтому заменённый snapshot остаётся незашифрованным, пока приложение явно не настроит защиту вывода перед сохранением

Основные API

Редактирование графа объектов и сборка страниц