Поля форм
Модуль Form (FormFieldManager, FormField) создаёт интерактивные поля AcroForm внутри PDF. Типы полей определяются enum-ом FormFieldType: TEXT, PASSWORD, TEXTAREA, CHECKBOX, RADIO, LISTBOX, COMBOBOX, BUTTON. Все методы возвращают static, поэтому каждый вызов может быть объединён в цепочку.
Краткий справочник
| Метод | Тип поля |
|---|---|
textField() | Однострочный текстовый ввод |
checkboxField() | Переключатель чекбокса |
radioField() | Радиокнопка (группированная) |
listboxField() | Прокручиваемый список |
comboboxField() | Выпадающий список |
buttonField() | Кнопка с опциональным JavaScript-действием |
flattenFields() | Преобразовать все интерактивные поля в статический контент |
Базовый пример
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Registration Form', newLine: true)
->ln(5)
// Текстовое поле
->cell(30, 8, 'Name:')
->textField('name', 45, null, 80, 8, [
'border' => ['width' => 1],
'maxLength' => 100,
])
->ln(12)
// Поле email
->cell(30, 8, 'Email:')
->textField('email', 45, null, 80, 8)
->ln(12)
// Чекбокс
->checkboxField('agree', 15, null, 5, 5)
->cell(0, 5, ' I agree to the terms', newLine: true)
->ln(10)
// Выпадающий список
->cell(30, 8, 'Country:')
->comboboxField('country', 45, null, 60, 8, ['US', 'UK', 'TW', 'JP', 'DE'])
->ln(12)
// Кнопка отправки
->buttonField('submit', 45, null, 40, 10, 'Submit', 'submitForm("https://example.com/submit")');Текстовые поля и чекбоксы
$pdf->textField(string $name, float $x, float $y, float $w, float $h, array $prop = []);
$pdf->checkboxField(string $name, float $x, float $y, float $w, float $h, bool $checked = false);Передайте null для $y, чтобы использовать текущую позицию вертикального курсора.
Поля радиокнопок
$pdf->radioField(string $name, float $x, float $y, float $w, float $h, array $prop = []);Радиокнопки с одинаковым $name формируют взаимоисключающую группу:
$pdf->cell(30, 8, 'Gender:')
->radioField('gender', 45, null, 5, 5, ['value' => 'male'])
->cell(10, 5, ' M')
->radioField('gender', 65, null, 5, 5, ['value' => 'female'])
->cell(10, 5, ' F');Список, выпадающий список и кнопки
$pdf->listboxField(string $name, float $x, float $y, float $w, float $h, array $values, array $prop = []);
$pdf->comboboxField(string $name, float $x, float $y, float $w, float $h, array $values, array $prop = []);
$pdf->buttonField(string $name, float $x, float $y, float $w, float $h, string $caption, string $action = '');listboxField() рендерит прокручиваемый многострочный список. comboboxField() рендерит однострочный выпадающий список. buttonField() создаёт кнопку с опциональной строкой JavaScript-действия.
$pdf->buttonField('reset', 15, null, 40, 10, 'Reset', 'this.resetForm()')
->buttonField('print', 60, null, 40, 10, 'Print', 'this.print()');Свойства полей
Массив $prop управляет внешним видом и поведением поля:
| Ключ | Тип | Описание |
|---|---|---|
border | array | Стиль рамки с ключами width, color, style |
bgcolor | array | Цвет фона как [r, g, b] |
font | string | Имя семейства шрифта |
fontSize | float | Размер шрифта в пунктах |
alignment | string | Выравнивание текста: left, center, right |
maxLength | int | Максимальное количество символов (текстовые поля) |
readonly | bool | Запретить редактирование пользователем |
required | bool | Отметить как обязательное для валидации формы |
value | string | Значение по умолчанию / начальное значение |
Выравнивание форм
Выравнивание преобразует все интерактивные поля в статический, нередактируемый контент. Это полезно для архивирования заполненных форм или создания окончательного PDF-файла только для чтения.
$pdf->flattenFields(); // Преобразовать все поля формы в статический контентПосле выравнивания значения полей становятся постоянным текстом. Поля больше не могут быть отредактированы в PDF-просмотрщике.