Документні операції 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Завантажений документКількості сторінок, об'єктів, форм і полів підписів
renderpage, dpi (18–1,200), format (png)PNG-артефакт і розміри
export.structuredpages, format, optionsСемантичний артефакт HTML/XHTML/XML/JSON і телеметрія експорту
tables.exportpages, format, optionsТипізований артефакт CSV/JSON/XLSX і телеметрія таблиць/комірок/заголовків
text.extractpages, необов'язковий layoutТекст сторінки в Unicode і необов'язковий текстовий артефакт UTF-8
text.replacepages, needle, replacement, matchCaseПо-сторінкові кількості збігів/замін/пропусків і необов'язковий PDF-артефакт
forms.readЗавантажений документІмена, декодовані значення Unicode і нативні типи полів
forms.fillМасив fields із рядками name/valueАтомарні оновлення; невідомі або дублікатні імена відхиляють операцію
forms.flattenЗавантажений документКількість вирівняних і поля, що залишилися
ocr.layerpages, engine (builtin-ascii), dpi, minimumConfidence, skipPagesWithText, replaceExistingПошуковий PDF і кількості прийнятих/відкинутих слів
redactburnIn: true, прямокутники з page/x1/y1/x2/y2Кількість застосованих редактувань і PDF-артефакт
signpfxFile, pfxPassword, page, fieldName, необов'язковий прямокутник і contentsBytesPDF-артефакт, підписаний PFX
archive.pdfa4.rasteracceptInformationLoss: 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

КлючТипове значення
memoryBytes268,435,456
outputBytes134,217,728
resultBytes16,777,216
timeMilliseconds60,000
objectCount1,000,000
pageCount1,024
pixels100,000,000

Загальні бюджети виводу/результату кожен обмежений половиною бюджету пам'яті; архівне перетворення застосовує жорсткіші межі вище. Вони обмежують налаштовані ресурси операції, а не загальну пам'ять процесу

Перевірки скасування та минулого часу є кооперативними на контрольних точках операції, сторінки, читання входу та запису виводу; довга нативна підпрограма може тривати до своєї наступної контрольної точки

Звіти несуть schemaVersion, status і statusCode; помилки бюджету використовують status 8, скасування 4, збій I/O 5, збій розбору 6, некоректні аргументи 1, а збій виконання 7