Документні операції JSON і C ABI
export.structured експортує вибрані сторінки у семантичний HTML, XHTML, XML або JSON; tables.export експортує типізовані таблиці у CSV, JSON або XLSX, зберігаючи наскрізну сторінкову неперервність, об'єднані комірки та вбудоване виведення значень
Обидві операції вимагають бінарного призначення виводу, зберігають документ і наявні поля підписів та надають обмежені нативні параметри експорту
Структурований та типізований табличний експорт
{"schemaVersion":1,"type":"export.structured","pages":[0,1],"format":"html",
"options":{"imageMode":"metadata","includeFormControls":false}}
{"schemaVersion":1,"type":"tables.export","pages":[0,1],"format":"json",
"options":{"mergeAcrossPages":true,"dateOrder":"dmy",
"decimalSeparator":",","thousandsSeparator":"."}}
Структурований експорт приймає html, xhtml, xml і json (за замовчуванням); табличний експорт приймає csv (за замовчуванням), json і xlsx
Булеві параметри структурованого експорту — includeCoordinates, includeStyles, includeImages, includeTables, includeAccessibilitySemantics, preferTaggedStructure, fallbackToGeometricSemantics, includeNavigation, includeAnnotations і includeFormControls; усі типово мають значення true
imageMode приймає omit, metadata і embedded-png (за замовчуванням); семантичну модель і поведінку для чутливих полів описано на сторінці Структурований експорт завантаженої сторінки
Ресурсні параметри структурованого експорту — maxPageCount, maxGlyphsPerPage, maxImagesPerPage, maxStructureNodes, maxOutlineItems, maxInteractionsPerPage, maxFormOptionsPerField, maxOutputBytes, maxImageBytes і maxTotalImageBytes
Булеві параметри табличного експорту — detectMergedCells, detectRepeatedHeaders, mergeAcrossPages і inferValueTypes; усі типово мають значення true
dateOrder приймає ymd (за замовчуванням), mdy і dmy; розділювачі мають бути окремими друкованими символами, а порожній thousandsSeparator вимикає розділювач тисяч
minimumTableConfidence приймає значення від 0 до 1 і типово дорівнює 0.55; додатний columnTolerance типово дорівнює 12 сторінковим одиницям
Ресурсні параметри табличного експорту — maxPageCount, maxGlyphsPerPage, maxTableCount, maxRowCount, maxCellCount, maxTextCharacters і maxOutputBytes; модель комірки описано на сторінці Типізоване вилучення таблиць
Невідомі імена параметрів, некоректні типи, непідтримувані формати та ліміти, що не є додатними, відхиляються; запитані нативні ліміти обмежуються консервативними бюджетами пам'яті та кількості об'єктів
Проміжне розміщення експорту обмежене меншим зі значень budget.outputBytes та чверті budget.memoryBytes; effectiveOutputLimit повідомляє саме цю межу, хоча можуть застосовуватися і жорсткіші options.maxOutputBytes
Нативні збої ресурсів повідомляють budget-exceeded, метрику nativeExportResources і нативну діагностику; observed=1 і limit=0 позначають відмову в ресурсі, а не виміряне споживання байтів
Обидві операції повідомляють documentUpdated: false, зберігають вихідні налаштування автозапуску та декодування, спершу розміщують вивід у проміжному стані перед публікацією та залишають наявні файлові призначення після невдалого файлового завдання
Перевірки дедлайну та скасування ABI-колбеків є кооперативними на контрольних точках операції та публікації; нативні токени скасування також діють усередині підтримуваних етапів витягання, і нативну роботу не переривають примусово
THPDFJobProcessor.ExecuteLoadedOperation і hpdf_document_execute_json_v1 використовують спільний версійований за схемою рушій документних операцій
Поточні імена операцій, формати, профіль підписання, поведінку колбеків і типові бюджети можна дізнатися через THPDFJobProcessor.Capabilities або hpdf_capabilities_json_to_io
Операції
JSON операції використовує UTF-8 і schemaVersion: 1; індексація сторінок із нуля, а масиви вибраних сторінок не можуть містити дублікатів
| Тип | Вхід | Результат |
|---|---|---|
| info | Завантажений документ | Кількості сторінок, об'єктів, форм і полів підписів |
| render | page, dpi (18–1,200), format (png) | PNG-артефакт і розміри |
| export.structured | pages, format, options | Семантичний артефакт HTML/XHTML/XML/JSON і телеметрія експорту |
| tables.export | pages, format, options | Типізований артефакт CSV/JSON/XLSX і телеметрія таблиць/комірок/заголовків |
| text.extract | pages, необов'язковий layout | Текст сторінки в Unicode і необов'язковий текстовий артефакт UTF-8 |
| text.replace | pages, needle, replacement, matchCase | По-сторінкові кількості збігів/замін/пропусків і необов'язковий PDF-артефакт |
| forms.read | Завантажений документ | Імена, декодовані значення Unicode і нативні типи полів |
| forms.fill | Масив fields із рядками name/value | Атомарні оновлення; невідомі або дублікатні імена відхиляють операцію |
| forms.flatten | Завантажений документ | Кількість вирівняних і поля, що залишилися |
| ocr.layer | pages, engine (builtin-ascii), dpi, minimumConfidence, skipPagesWithText, replaceExisting | Пошуковий PDF і кількості прийнятих/відкинутих слів |
| redact | burnIn: true, прямокутники з page/x1/y1/x2/y2 | Кількість застосованих редактувань і PDF-артефакт |
| sign | pfxFile, pfxPassword, page, fieldName, необов'язковий прямокутник і contentsBytes | PDF-артефакт, підписаний PFX |
| archive.pdfa4.raster | acceptInformationLoss: true, iccProfileFile, необов'язкові dpi і options | Перевірений растровий артефакт PDF/A-4, кількості вилучень і явний профіль втрат; зберігає завантажене джерело |
Заміна тексту повертає частковий статус, коли нативний API заміни не може закодувати збіг; звіряйте його по-сторінкові кількості
OCR зараз надає лише вбудований ASCII-рушій; нативні Delphi API приймають зовнішні OCR-адаптери
Мутації відхиляють документи з наявними полями підписів, зокрема непідписаними заповнювачами; щоб зберегти підписи в таких документах, використовуйте нативні інкрементальні API
Підписання створює підписаний артефакт і відновлює початковий хендл, повідомляючи documentUpdated: false; наявні поля форм залишаються доступними, тимчасові поля підписів вилучаються, а хендл після підписання можна опитувати або використати для іншої операції
Архівне растрове перетворення у PDF/A-4
{
"schemaVersion": 1,
"type": "archive.pdfa4.raster",
"acceptInformationLoss": true,
"iccProfileFile": "profiles/sRGB.icm",
"dpi": 150,
"input": "source.pdf",
"output": "archive.pdf"
}
Помістіть цей об'єкт у масив operations файлового завдання або подайте його напряму через hpdf_document_execute_json_v1 із завантаженим хендлом і колбеками бінарного виводу; C ABI ігнорує вхідні/вихідні шляхи файлового завдання і використовує власні адаптери
acceptInformationLoss має бути JSON-булевим true, а iccProfileFile має вказувати непорожній шлях без NUL до підтримуваного профілю ICC sRGB matrix/TRC на машині виконання; відносні шляхи профілів розв'язуються відносно робочого каталогу процесу
dpi типово дорівнює 150 і приймає цілі числа від 36 до 1,200; перетворення охоплює кожну вихідну сторінку і відхиляє будь-який член pages
Об'єкт результату archive повідомляє nativeValidationSucceeded, sourcePages, pagesRendered, rasterPixels, outputBytes, removedAnnotations, removedFormFields і removedEmbeddedFiles
archive.lossy дорівнює true, а кожен прапорець у archive.lossProfile має значення false: searchableText, vectorContent, interactiveContent, originalSignatures, annotationAppearances і structureIdentity
Вміст сторінок перетворюється на RGB-пікселі; анотації та зовнішній вигляд віджетів опускаються, а оригінальні підписи не переносяться у вивід. Завантажене джерело залишається доступним із documentUpdated: false, зокрема після невдалої публікації; його попередні налаштування запуску, декодування, потокових порогів, скасування та рендерингу відновлюються
Потрібен бінарний вивід, і нативна валідація PDF/A-4 має пройти до видачі результату. Межі рендерингу, кольорів, кодеків, псевдонімів джерел і відповідності описані на сторінці растрове перетворення завантаженого документа у PDF/A-4
Ресурсні бюджети архівування
Необов'язковий об'єкт options приймає додатні точні цілі числа, які підсилюють наведені далі чинні межі; невідомі ключі та значення, що перевищують межу, відхиляють запит, а не збільшують бюджет операції
| Параметр | Чинні типове значення та максимум |
|---|---|
| maxPages | Мінімум із 1,000 і budget.pageCount |
| maxInputObjects | Мінімум із 200,000 і budget.objectCount |
| maxPixelsPerPage | Мінімум із 40,000,000, budget.pixels і memoryBytes / 32 |
| maxTotalPixels | Мінімум із 500,000,000, budget.pixels і memoryBytes / 32 |
| maxRasterBytes | Мінімум із 256 MiB і memoryBytes / 8 |
| maxOutputBytes | Мінімум із 256 MiB, budget.outputBytes і memoryBytes / 8 |
| maxDecodedStreamBytes | Мінімум із 64 MiB і memoryBytes / 8 |
| maxTotalDecodedBytes | Мінімум із 256 MiB і memoryBytes / 4 |
Файл ICC обмежений меншим зі значень 4 MiB і memoryBytes / 16 перед виділенням пам'яті; ці консервативні припуски враховують одночасне проміжне розміщення, буфери виводу, дані зображень і роботу декодера, але не задають жорсткого ліміту RSS процесу
Коли більше архівне навантаження є навмисним, збільшуйте бюджети завдання верхнього рівня; вкладені параметри лише підсилюють чинні межі, а нативні максимуми як і раніше застосовуються
Архівні контрольні точки під час перетворення опитують скасування колбеків, позичений токен скасування джерела, минулий час і кількість об'єктів. Збої бюджету та скасування зберігають свої структуровані коди статусів крізь нативний конвертер
Файлові завдання
{
"operations": [
{"type": "capabilities"},
{"schemaVersion": 1, "type": "text.extract", "input": "input.pdf",
"pages": [0, 1], "output": "text.txt"}
]
}
THPDFJobProcessor.Execute приймає масив operations, до 1,024 операцій і 4 MiB JSON; наявні завдання merge, split, optimise, encrypt і validate як і раніше доступні
Кожна документна операція подає вхідний шлях і необов'язковий пароль; render, text.replace, forms.fill, forms.flatten, ocr.layer, redact, sign і archive.pdfa4.raster вимагають вихідного шляху
Артефакти записуються в тимчасовий файл поруч із призначенням, скидаються на диск, перевіряються, а потім атомарно публікуються; збій зберігає наявне призначення, а вхід і вивід можуть використовувати один шлях
Контракт колбеків C
Обнуліть hpdf_operation_v1, установіть struct_size у його нативний розмір, abi_version у HPDF_ABI_VERSION_1, а flags — у нуль; звірте його розмір із hpdf_abi_operation_v1_size
Запис операції несе байти JSON і точну довжину, необов'язковий вхід із довільним доступом, необов'язковий послідовний бінарний вивід та обов'язковий послідовний вивід JSON-результату
Вхідні колбеки, дані користувача і байти PDF, що лежать в основі, мають залишатися чинними, доки хендл не буде замінено або знищено, адже відкладений аналіз утримує адаптер
Колбеки виводу/результату існують лише під час виклику; серіалізуйте виклики для кожного хендла і уникайте повторного входу в колбеки
Колбеки використовують cdecl, часткові передачі повторюються, а успішний запис має давати додатний прогрес; винятки перетворюються на фіксовані коди статусів
Мутації фіксуються лише після успішної доставки і артефакту, і JSON-результату; збій або скасування колбека відкочує зміни, а викликачі відкидають уже доставлені байти
Вхід заміни завантажується до транзакції мутації і залишається окремою зміною стану
Бюджети
Необов'язковий об'єкт бюджету приймає додатні точні цілі числа, що не перевищують 9,007,199,254,740,991
| Ключ | Типове значення |
|---|---|
| memoryBytes | 268,435,456 |
| outputBytes | 134,217,728 |
| resultBytes | 16,777,216 |
| timeMilliseconds | 60,000 |
| objectCount | 1,000,000 |
| pageCount | 1,024 |
| pixels | 100,000,000 |
Загальні бюджети виводу/результату кожен обмежений половиною бюджету пам'яті; архівне перетворення застосовує жорсткіші межі вище. Вони обмежують налаштовані ресурси операції, а не загальну пам'ять процесу
Перевірки скасування та минулого часу є кооперативними на контрольних точках операції, сторінки, читання входу та запису виводу; довга нативна підпрограма може тривати до своєї наступної контрольної точки
Звіти несуть schemaVersion, status і statusCode; помилки бюджету використовують status 8, скасування 4, збій I/O 5, збій розбору 6, некоректні аргументи 1, а збій виконання 7