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() | Создайте поле непосредственно на странице |