Skip to content

Поля форм

Модуль Form (FormFieldManager, FormField) создаёт интерактивные поля AcroForm внутри PDF. Типы полей определяются enum-ом FormFieldType: TEXT, PASSWORD, TEXTAREA, CHECKBOX, RADIO, LISTBOX, COMBOBOX, BUTTON. Все методы возвращают static, поэтому каждый вызов может быть объединён в цепочку.

Краткий справочник

МетодТип поля
textField()Однострочный текстовый ввод
checkboxField()Переключатель чекбокса
radioField()Радиокнопка (группированная)
listboxField()Прокручиваемый список
comboboxField()Выпадающий список
buttonField()Кнопка с опциональным JavaScript-действием
flattenFields()Преобразовать все интерактивные поля в статический контент

Базовый пример

php
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")');

Текстовые поля и чекбоксы

php
$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, чтобы использовать текущую позицию вертикального курсора.

Поля радиокнопок

php
$pdf->radioField(string $name, float $x, float $y, float $w, float $h, array $prop = []);

Радиокнопки с одинаковым $name формируют взаимоисключающую группу:

php
$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');

Список, выпадающий список и кнопки

php
$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-действия.

php
$pdf->buttonField('reset', 15, null, 40, 10, 'Reset', 'this.resetForm()')
    ->buttonField('print', 60, null, 40, 10, 'Print', 'this.print()');

Свойства полей

Массив $prop управляет внешним видом и поведением поля:

КлючТипОписание
borderarrayСтиль рамки с ключами width, color, style
bgcolorarrayЦвет фона как [r, g, b]
fontstringИмя семейства шрифта
fontSizefloatРазмер шрифта в пунктах
alignmentstringВыравнивание текста: left, center, right
maxLengthintМаксимальное количество символов (текстовые поля)
readonlyboolЗапретить редактирование пользователем
requiredboolОтметить как обязательное для валидации формы
valuestringЗначение по умолчанию / начальное значение

Выравнивание форм

Выравнивание преобразует все интерактивные поля в статический, нередактируемый контент. Это полезно для архивирования заполненных форм или создания окончательного PDF-файла только для чтения.

php
$pdf->flattenFields();  // Преобразовать все поля формы в статический контент

После выравнивания значения полей становятся постоянным текстом. Поля больше не могут быть отредактированы в PDF-просмотрщике.

Распространяется по лицензии LGPL-3.0-or-later.