Конфигурация задач в JSON

THPDFJobProcessor принимает документ JSON, описывающий упорядоченные операции над PDF, и возвращает результат JSON со статусом по каждой операции

Поддерживаемые операции

merge объединяет несколько входных PDF в один выходной файл через AppendPagesFromDocument

split извлекает диапазоны страниц из входного PDF в отдельные выходные файлы через ExtractLoadedPagesToPDF

optimise пережимает streams FlateDecode и LZWDecode с порогом минимальной экономии

encrypt применяет шифрование AES-256, AES-128, RC4-128 или RC4-40 с заданными вызывающим кодом паролями и типом ключа

validate запускает встроенную политику валидации и возвращает текст отчёта

ocr.layer создаёт ищемый текст через встроенный ASCII-движок по умолчанию или явно сконфигурированные локальные адаптеры Tesseract/RapidOCR CLI и DLL; см. конфигурацию внешних OCR-заданий

Схема JSON

Вход должен содержать одно полное значение JSON с корректными разделителями, закрытыми контейнерами, валидными escape-последовательностями в строках и только JSON-пробелами вне строк; хвостовой контент и числа за пределами конечного диапазона Double отвергаются

Парсер принимает не более 64 уровней вложенности значений, считая корневое значение первым уровнем; повреждённые или чрезмерно вложенные задачи падают до запуска какой-либо операции, а частично разобранные значения освобождаются

Вход — объект с массивом operations; у каждой операции есть поле type и специфичные для типа параметры

Выход — объект с массивом results; каждый результат содержит type, status (ok, error или skipped) и специфичные для операции поля

Строковые значения сохраняют экранированные символы Unicode, включая \u0000; конечные числа используют десятичный разделитель, независимый от локали, и могут сериализоваться за пределами знакового 64-битного диапазона

Числовые значения хранятся как Double и следуют точности преобразования с плавающей запятой в рантайме компилятора, поэтому целые за пределами его точного целочисленного диапазона могут округляться на входе; GetInt и GetInt64 возвращают переданное значение по умолчанию, когда округлённое число выходит из их знакового целочисленного диапазона

Бюджеты на операцию

Каждая операция может содержать объект budget с лимитами memoryBytes, timeMilliseconds, objectCount, decompressionRatio и outputBytes

{"operations":[{"type":"optimise","input":"in.pdf","output":"out.pdf",
  "budget":{"memoryBytes":268435456,"timeMilliseconds":30000,
  "objectCount":1000000,"decompressionRatio":200,"outputBytes":1073741824}}]}

Нарушение лимита возвращает status=budget-exceeded плюс metric, observed, limit и elapsedMilliseconds, не прерывая последующие операции

Бюджеты памяти применяются также к раздельному учёту по stream и декодированию документа, так что расширение остаётся ограниченным ещё до удержания крупных буферов

Opaque handle API

HPDFDocCreate возвращает непрозрачный THPDFDocHandle, оборачивающий экземпляр THotPDF; HPDFDocLoadFromFile, HPDFDocGetPageCount, HPDFDocSaveLoadedDocument и HPDFDocRunJob работают с этим handle, а HPDFDocDestroy освобождает его

Эти совместимые по исходному коду Pascal helper остаются доступными для вызывающего кода Delphi и C++Builder

Стабильный C Callback ABI HotPDF предоставляет плоскую версионируемую C-границу для ввода с произвольным доступом, потокового вывода, отмены, прогресса, диагностики и жизненного цикла opaque handle