Обмен FDF/XFDF в Windows
Файловые задания Windows и hpdf_document_execute_json_v1 реализуют forms.export и forms.import для fdf и xfdf, используя нативный скалярный и ограниченный rich XHTML/CSS кодеки
Файловые задания
{
"schemaVersion": 1, "type": "forms.import", "format": "xfdf",
"input": "source.pdf", "output": "filled.pdf", "password": "owner",
"formDataInput": "values.xfdf",
"fonts": {
"regular": "DejaVuSans.ttf", "bold": "DejaVuSans-Bold.ttf",
"italic": "DejaVuSans-Oblique.ttf", "boldItalic": "DejaVuSans-BoldOblique.ttf"
},
"budget": {"memoryBytes": 268435456, "outputBytes": 134217728,
"timeMilliseconds": 60000, "resultBytes": 16777216}
}
forms.export использует input, output, format и опциональный password; formDataInput и fonts ему не нужны; файловые задания резервируют монопольного кандидата рядом с целью, сбрасывают и закрывают его, валидируют ограниченный JSON-результат и атомарно заменяют цель
Отсутствующие шрифты, некорректный ввод, сбои аутентификации или политики, исчерпанные лимиты и неудавшаяся публикация сохраняют существующую целостную цель; output не должен алиасить PDF или входные данные формы, включая жёсткую ссылку
Именованные семейства шрифтов
forms.import принимает fontFamilies в корне операции как массив из одного до шестнадцати лейблов; отсутствие сохраняет исходный односемейный профиль и лейбл fontFamily в callback
"fontFamilies": ["DejaVu Sans", "DejaVu Serif Condensed"],
"fonts": {
"DejaVu Sans": {
"regular": "DejaVuSans.ttf", "bold": "DejaVuSans-Bold.ttf",
"italic": "DejaVuSans-Oblique.ttf", "boldItalic": "DejaVuSans-BoldOblique.ttf"
},
"DejaVu Serif Condensed": {
"regular": "DejaVuSerifCondensed.ttf", "bold": "DejaVuSerifCondensed-Bold.ttf",
"italic": "DejaVuSerifCondensed-Italic.ttf", "boldItalic": "DejaVuSerifCondensed-BoldItalic.ttf"
}
}
В файловых заданиях fonts содержит объекты с ключами по точным настроенным лейблам; без fontFamilies сохраняется исходный объект с прямыми путями стилей; читаются только реальные программы семейства/стиля, и все выбранные байты шрифтов делят бюджет операции
В Windows V1 callback'ах существующий шрифтовой callback получает каждый реальный канонический лейбл UTF-8 из настроек и выбранный стиль; два семейства со всеми четырьмя стилями дают восемь реальных запросов программ без изменения записи callback
ASCII-буквы лейблов сравниваются без учёта регистра, остальные символы Unicode — точно; лейблы различны, непусты и не длиннее 128 кодовых единиц UTF-16, без окружающих пробелов, управляющих символов, неспаренных суррогатов или пунктуации CSS-кавычек и разделителей
Первое настроенное семейство — умолчание для скалярного текста и наследуемых rich-стилей; по умолчанию списки CSS font-family используют выбор «первое известное семейство» нативного кодека
Опциональный fallbackFontFamilies=true сохраняет упорядоченные кандидаты inline CSS font-family и загружает реальные настроенные программы начертаний/стилей для fallback целыми графемами; typed-кандидаты, загрузка через callback и rich-only охват описаны в Windows supplied-family rich font fallback
Применённый результат сообщает richXMLProfile inline-xhtml-font-families-v1, настроенный массив fontFamilies и реальные объекты fontFamilyStyles с family, style и bytes; fontStyles сохраняет исходный тип массива объектов и суммирует байты по стилям; fontBytes считает все реальные программы
Без массива richXMLProfile — inline-xhtml-v1; смешанное скалярное и original typed-rich forms.fill использует отдельный биндинг original-typed-runs-v1, описанный ниже; старое расширение шрифтового callback'а задания остаётся отдельной последующей работой
Версионированные C callback'и Windows
Подключите hotpdf_abi_form_data.h; заполните hpdf_form_data_operation_v1, поставьте operation.struct_size в его полный размер и передайте неизменённый префикс операции в hpdf_document_execute_json_v1
Опциональный шрифтовой callback получает байты семейства в UTF-8 и стиль 0 regular, 1 bold, 2 italic или 3 boldItalic и возвращает полную таблицу чтения hpdf_io_v1 для реальной программы шрифта; при rich-данных со всеми четырьмя стилями предоставьте все четыре программы
Скалярные данные запрашивают программу regular; fontFamily по умолчанию DejaVu Sans; переданные шрифтовые IO callback'и и user data должны оставаться валидными до возврата операции; ненулевые статусы callback'ов «липкие» и пробрасываются без повторной попытки с fallback
Для forms.import InputIO подаёт FDF/XFDF, а назначение должно быть уже загружено; OutputIO получает кандидата PDF, ResultIO — ограниченный JSON; forms.export использует исходную запись V1 и пишет FDF/XFDF в OutputIO
Windows hpdf_document_load_from_io копирует весь ввод в неизменяемый собственный источник перед возвратом; замена или дописывание вызывающим не может изменить активную загруженную ревизию или её последующий вывод данных формы
Собственные источники используют отдельный синхронизированный хэндл для фоновых случайных чтений, поэтому prefetch не может сдвинуть последовательный курсор публикации; документ-кандидат освобождает своих фоновых читателей до уничтожения источника
Активный контекст меняется только после успеха обоих callback'ов — вывода и результата — и прохождения финальной контрольной точки отмены; сбой callback'а или отмена отбрасывают кандидата и сохраняют прежний документ и собственный источник
Callback мог успеть получить байты кандидата до сбоя более позднего callback'а; вызывающий обязан фиксировать своё выходное назначение только после возврата execute-функцией HPDF_STATUS_OK
Исходные раскладки записей V1 и экспортируемые символы не изменились; это Windows-расширение отдельно от опубликованного расширения callback'ов нативного Linux
Связанные точки входа — процессор файловых заданий и hpdf_document_execute_json_v1; старая запись callback'а HPDFDocRunJob и generic ExecuteLoadedOperation на этом этапе расширения шрифтов не получают; вызывающие на Pascal могут использовать явный класс транзакции
Поля, rich text и политика
Поддерживаемые значения включают вложенные имена текста Unicode, export-имена checkbox и radio, массивы multiselect и неизменённые read-only значения; /V, /RV и настоящие ресурсы AP сохраняются вместе; неизвестные поля и обязательные ограничения полей проваливают транзакцию
Rich-обмен использует документированный ограниченный профиль XHTML/CSS и реальные переданные стилевые шрифты; он не заявляет поддержки произвольного HTML, всего CSS или неограниченного rich XML
Подписанные обновления AES R5/R6 сохраняют полный исходный префикс, параметры шифрования, постоянный идентификатор шифрования и существующую подпись CMS; неизменённые скалярные или rich-импорты побайтово идентичны текущей зафиксированной ревизии
Целостность существующих CMS и привязка подписанта ESS аутентифицируются до подписанных обновлений формы; заполнение P2/P3 разрешено только в его реальных ограничениях; P1, блокировки FieldMDP и изменённые read-only поля отказывают в публикации
signaturePolicy принимает булевы requireCAdES, requireTimestamp, requireAdobeRevocationInfo и requireTimestampRevocation; trustedCAFile, timestampCAFile, timestampCRLFile и revocationCAFile должны быть строками без NUL и включают явное доверие вызывающего для запрошенных проверок
Опции C callback'ов также ограничивают подписанные свидетельства через maxEvidenceBytes и maxEvidenceObjects; валидация доверия отдельна от проверки целостности подписи по умолчанию
formData может уменьшить maxBytes, maxFields, maxObjects, maxDepth, maxValues, maxValueCodeUnits и maxTotalCodeUnits; эти точные положительные целые дополнительно зажимаются рабочей ёмкостью; objectCount и pageCount в budget ограничивают документы-кандидаты
budget.timeMilliseconds задаёт дедлайн операции; Windows C callback'и принимают также elapsedMilliseconds как дополнительное более жёсткое ограничение; отмена опрашивается во время подготовки текущего графа, декодирования формы, чтения шрифтов, проверок CMS, загрузки кандидата и публикации
Capabilities сообщают реальные форматы, стили, неизменяемый ввод и транзакционное поведение callback'ов; обмен аннотациями, встроенные FDF-файлы, действия и инкрементальные FDF-документы остаются отдельными незавершёнными возможностями
Смежные темы
Смешанное скалярное и original typed rich заполнение использует тот же аутентифицированный жизненный цикл Windows-кандидата через файловые задания и execute-json-v1
Класс транзакции, Подготовка текущего графа, Нативные данные форм
Внутренние стилевые листы применяют ограниченные селекторы, importance, специфичность и порядок в источнике к фактическим импортированным rich-значениям и сохранённым внешним видам; повторные эквивалентные импорты и неудавшаяся публикация сохраняют существующие гарантии транзакций
richTextResources поставляет связываемый и импортируемый CSS для фактических файловых заданий Windows и импортов execute-json-v1, используя существующие транзакцию и привязки шрифтов