Модель хоста XFA
Включите TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript, чтобы использовать модель xfa.host с состоянием через поставляемый движок QuickJS
Настройте метаданные приложения через TXFAWidgetRuntimeOptions.HostModel до создания рантайма и читайте текущее состояние через TXFAWidgetRuntime.HostModel
Свойства
| Свойство | Поведение |
|---|---|
name, version, appType, platform, variation, language | Метаданные приложения только для чтения, предоставленные встраивающим приложением |
numPages | Фактическое число страниц раскладки только для чтения, включая позиционированное содержимое за пределами виджетов полей |
currentPage | Текущая страница с нуля, проверяемая по numPages; фокус на поле выбирает его страницу |
title | Заголовок рантайма в Unicode, ограниченный MaxValueChars и публикуемый вместе с транзакцией |
calculationsEnabled | Управляет автоматическими скриптами вычислений; по умолчанию true |
validationsEnabled | Управляет скриптами валидации отредактированных значений; по умолчанию true |
Версия приложения идентифицирует встраивающее приложение; библиотека не подставляет свой номер версии
Состояние хоста принадлежит рантайму; изменения заголовка и страницы не изменяют исходный граф объектов PDF и не кодируются в сохраняемые данные XDP
Навигация, focus и сброс данных
| Метод | Поведение |
|---|---|
pageUp(), pageDown() | Двигаются в пределах страниц и останавливаются на первой или последней странице |
getFocus() | Возвращает живое сфокусированное вхождение поля или null, когда focus отсутствует, удалён или скрыт |
setFocus(fieldOrSOM) | Запрашивает focus на видимом живом вхождении поля; null или пустой текст сбрасывает focus |
resetData(paths="") | Восстанавливает дефолтные значения шаблона для полей, выбранных списком SOM через запятую, или всех полей, когда paths пуст; число повторяющихся экземпляров и посторонние вхождения сохраняются |
Сброшенные поля выходят из режима редактирования и возвращаются в корректное состояние взаимодействия, не давая устаревшему буферу правки перезаписать сброшенное значение
Reset и loadXML Data DOM могут выполняться в одном событии; их изменения разделяют транзакцию события, а упавший скрипт или исчерпанный бюджет восстанавливает значения данных, буферы правки, состояние хоста и лексическое состояние script-объектов до повторной попытки
Идентичности полей следуют за своим вхождением данных, когда instance manager переупорядочивает повторяющиеся subform, а восстановление снимка сохраняет эти логические идентичности
Жизненный цикл focus и транзакции
Изменения focus в рантайме фиксируют и валидируют ожидающую правку источника, выполняют exit-скрипты источника, выбирают новое поле и выполняют enter-скрипты цели до того, как вычисления и раскладка устаканятся
Запросы focus из enter- или exit-скриптов могут перенаправить цель; каждый цикл обработки focus допускает 64 перехода и разделяет бюджеты операций и времени скрипта
Скрипты видят активность через xfa.event.name; вычисления и валидация получают соответствующие имена контекстов
Публичные вызовы FocusWidget и enter/exit DispatchEvent используют тот же транзакционный жизненный цикл; ClearFocus отменяет текущий буфер правки до exit-цикла, сохраняя прежнее поведение отмены
OnFocusChanged публикует упорядоченные колбэки после фиксации; промежуточные перенаправления остаются внутри транзакции, а упавшие скрипты, валидация или бюджеты восстанавливают вместе состояние хоста, focus, буферы правки, значения документа и лексическое состояние скриптов
Options := TXFAWidgetRuntimeOptions.Default;
Options.ScriptOptions.EnableJavaScript := True;
Options.HostModel.Name := 'Application';
Options.HostModel.Version := '1.0';
Options.HostModel.Language := 'en-US';
Runtime := TXFAWidgetRuntime.Create(XDPBytes, 595, 842, Options);
xfa.host.title = "Order form";
xfa.host.setFocus("rows[1].quantity");
xfa.host.resetData("rows[1].quantity,rows[1].price");
xfa.host.calculationsEnabled = false;
Эффекты приложения и оставшееся покрытие
Диалоги, печать, внешняя навигация, импорт/экспорт и HTTP-эффекты используют явный транспорт хоста приложения и записанные ответы; сама модель состояния не запускает UI- или сетевых операций
Дополнительные API хостовых диалогов, каждое свойство хоста Acrobat, запросы динамического синхронного reflow и полные SOM-операторы остаются отдельными целями интеграции
Связанные API: TXFAHostModelState, PXFAHostModelState, HPDFXFAHostModelJavaScript и Интерактивный runtime виджетов динамического XFA