Конфигурация задач в 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