Forms

Forms

Эта страница охватывает создание и управление интерактивными полями AcroForm. Form, доступный через doc.Form, является фасадом для каждого типа поля; каждый метод Add*() создает поле, связанное со страницей и прямоугольником виджета, и возвращает типизированный дескриптор (TextField, CheckboxField, ChoiceField, ButtonField или RadioField), который разделяет общие свойства Field — Value, ReadOnly и Required.


Создание полей

Form.AddTextField(), Form.AddCheckbox(), Form.AddComboBox() и их «соседи» каждый принимают объект опций, в котором указываются целевой page (нумерация с нуля), виджет rect, поле name и стилизация, такая как borderColor и backgroundColor.

const form = doc.Form;
const pageNum = page.Number;

form.AddTextField({
  page: pageNum, rect: [200, 670, 450, 690], name: 'FullName', value: 'Alice Sample',
  borderColor: [0.05, 0.1, 0.3], backgroundColor: [0.9, 0.93, 1], borderWidth: 1,
  font: 'Helvetica', fontSize: 12,
});

form.AddCheckbox({
  page: pageNum, rect: [200, 630, 218, 648], name: 'Subscribe',
  checked: true, borderColor: [0.05, 0.1, 0.3], borderWidth: 1,
});

form.AddComboBox({
  page: pageNum, rect: [200, 550, 350, 570], name: 'Country', value: 'US',
  options: [
    { export: 'US', display: 'United States' },
    { export: 'UK', display: 'United Kingdom' },
    { export: 'DE', display: 'Germany' },
  ],
});

Page.AddTextField() и Page.AddCheckbox() создают те же типы полей непосредственно на странице, не указывая doc.Form или номер page в объекте опций.


Чтение и изменение полей

Form.Fields — это массив всех Field в документе; Form.Get() ищет один по его полностью квалифицированному имени. Value каждого поля можно прочитать или переопределить, а ReadOnly / Required являются простыми булевыми свойствами.

const nameField = doc.Form.Get('FullName');
if (nameField) {
  console.log(nameField.Value);
  nameField.Value = 'Bob Sample';
}

Сведение полей

Метод Flatten() каждого типа поля запекает его текущее отображение в статическое содержимое страницы и удаляет его из AcroForm — тот же постоянный, неинтерактивный эффект, который Annotation.Flatten() имеет для аннотаций.

const tb = form.AddTextField({
  page: pageNum, rect: [210, 660, 460, 680], name: 'FlattenName', value: 'Alice Sample',
});
tb.Flatten();

Советы и лучшие практики

  • Изменяйте дескриптор поля, возвращённый непосредственно вызовом Add*(), или полученный заново с помощью Form.Get() — устаревшая ссылка не видит изменений, внесённых в другом месте.
  • Form.RemoveField() принимает либо дескриптор Field, либо строку с именем поля.
  • Вызывайте Form.GenerateAppearances() после массового изменения значений полей, чтобы отображение каждого поля на экране оставалось синхронным с его Value.
  • Выпадающие списки и списки-выборки сохраняют выбранное значение export в /V; текст display — это то, что отображает сгенерированное представление.

Распространённые проблемы

ПроблемаПричинаИсправление
Поле, добавленное с Form.AddTextField(), не отображается на страницеКоординаты rect находятся за пределами размеров целевой страницыУбедитесь, что прямоугольник находится в пределах границ страницы
Поле всё ещё выглядит интерактивным после Flatten()Flatten() был вызван на копии, а не на дескрипторе Add*() / Form.Get(), который был возвращёнВызовите Flatten() у объекта, полученного непосредственно из формы
Изменение значения поля не видно на экранеВнешний вид поля не был пересоздан после изменения значенияВызовите Form.GenerateAppearances() или собственный GenerateAppearance() поля

FAQ

Как прочитать или изменить значение поля после его создания?

Найдите его с помощью Form.Get('fieldName') (или используйте дескриптор, возвращённый вызовом Add*()) и прочитайте или присвойте его свойство Value напрямую.

Какие типы полей поддерживает фасад Form?

Текстовые поля, флажки, группы переключателей, комбинированные списки, списковые окна и кнопки, через Form.AddTextField(), Form.AddCheckbox(), Form.AddRadioGroup(), Form.AddComboBox(), Form.AddListBox() и Form.AddPushButton().

Как удалить поле?

Вызовите Form.RemoveField(), передав либо дескриптор поля, либо его имя.

Как сделать поле формы постоянным и недоступным для редактирования?

Вызовите Flatten() на дескрипторе поля — тот же шаблон, который используется для аннотаций — который запекает его текущий вид в страницу и удаляет его из AcroForm.


API Reference Сводка

Класс/МетодОписание:
Formфасад AcroForm, доступный через doc.Form
Form.AddTextField() / Form.AddCheckbox() / Form.AddRadioGroup() / Form.AddComboBox() / Form.AddListBox() / Form.AddPushButton()Создать поле соответствующего типа
Form.FieldsКаждый Field в документе, как массив
Form.Get()Найти поле по полностью квалифицированному имени
Form.RemoveField()Удалить поле по идентификатору или имени
Form.GenerateAppearances()Перегенерировать отображение на экране для каждого поля
TextField / CheckboxField / ChoiceField / ButtonField / RadioFieldТипизированное поле обрабатывает совместное использование Value, ReadOnly, Required
Page.AddTextField() / Page.AddCheckbox()Создайте поле непосредственно на странице

См. также:

 Русский