Расширенная обработка AcroForm
HotPDF умеет пересчитывать загруженные поля, заново генерировать appearance переменного текста по стандарту, разрешать состояния appearance аннотаций и уплощать выбранное множество полей без перезаписи нетронутых страниц
Порядок расчёта
RecalculateLoadedFormFields следует загруженному массиву /AcroForm /CO и вычисляет ограниченные операции AFSimple_Calculate — SUM, AVG, PRD, MIN и MAX — через безопасный вычислитель скриптов полей
ApplyLoadedFieldCalculation устанавливает действие расчёта и добавляет целевое поле в /CO без дубликатов
Безопасные скрипты полей
EvaluateLoadedFieldJavaScript вычисляет только декларативные инструкции расчёта и валидации, связанные с запрошенным триггером поля
- Выражения поддерживают значения boolean, number, string, null, undefined и массивы с арифметическими и унарными операторами, сравнением, проверкой равенства, короткозамкнутыми логическими и условными операторами
event.valueсохраняет семантику строкового ввода, а числовой текст поля остаётся числом для совместимости с существующими расчётами- Разрешённые helper-функции покрывают преобразование чисел и строк, парсинг, избранные функции
Math, детерминированный разбор и создание UTC-дат, а также ограниченный осмотр строк и массивов AFSimple_Calculate,AFRange_Validate, присваиваниеevent.valueи присваиваниеevent.rcдают детерминированные результаты расчёта и валидации- Циклы, динамическое вычисление, доступ к приложению, отправка, импорт, запуск и прочий активный контент отклоняются
- Лимиты: 8,192 байта скрипта, 32 инструкции, 4,096 байта выражения, 32 уровня парсера, 1,024 операции, 64 аргумента, 128 элементов массива, 65,536 байт строки и 262,144 байта отслеживаемых значений
Appearance переменного текста
EnsureLoadedFieldAppearanceStream обходит каждый виджет и наследует значения /DA, /Q, /V, /DV, /Ff и /MaxLen из иерархии полей или AcroForm
- Выравнивание влево, по центру и вправо использует локальные координаты appearance виджета
- Многострочный текст получает ограниченное размещение строк и отсечение
- Нулевой размер шрифта в default appearance включает автоподбор размера
- Comb-поля расставляют каждый символ независимо по
/MaxLenячейкам
Состояния appearance аннотаций
GetLoadedAnnotationAppearanceStream разрешает appearance normal, rollover или down и делает откат от rollover или down к normal
Словари состояний используют /AS, унаследованное /V или /DV, состояние родителя, /Off и откат к единственному потоку — именно в этом порядке
Выборочное уплощение
FlattenLoadedFormFields отрисовывает только выбранные appearance виджетов на их страницах, удаляет только соответствующие поля и аннотации и сохраняет каждую нетронутую страницу и поле
Шлюз разрешений по умолчанию отказывает в структурных изменениях под DocMDP и проверяет блокировки FieldMDP All, Include и Exclude до изменения любой страницы
PDF.BeginIncrementalUpdate('SignedForm.pdf');
PDF.RecalculateLoadedFormFields;
PDF.FlattenLoadedFormFields(['Subtotal', 'Total']);
PDF.SaveIncrementalUpdate('SignedForm-updated.pdf');