Campos de formulario
El módulo Form (FormFieldManager, FormField) crea campos AcroForm interactivos dentro del PDF. Los tipos de campo se definen por el enum FormFieldType: TEXT, PASSWORD, TEXTAREA, CHECKBOX, RADIO, LISTBOX, COMBOBOX, BUTTON. Todos los métodos retornan static, por lo que cada llamada puede ser encadenada.
Referencia rápida
| Método | Tipo de campo |
|---|---|
textField() | Entrada de texto de una línea |
checkboxField() | Toggle de checkbox |
radioField() | Botón de radio (agrupado) |
listboxField() | Lista desplazable |
comboboxField() | Selector desplegable |
buttonField() | Botón de acción con acción JavaScript opcional |
flattenFields() | Convertir todos los campos interactivos en contenido estático |
Ejemplo básico
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Registration Form', newLine: true)
->ln(5)
// Campo de texto
->cell(30, 8, 'Name:')
->textField('name', 45, null, 80, 8, [
'border' => ['width' => 1],
'maxLength' => 100,
])
->ln(12)
// Campo de email
->cell(30, 8, 'Email:')
->textField('email', 45, null, 80, 8)
->ln(12)
// Checkbox
->checkboxField('agree', 15, null, 5, 5)
->cell(0, 5, ' I agree to the terms', newLine: true)
->ln(10)
// Desplegable
->cell(30, 8, 'Country:')
->comboboxField('country', 45, null, 60, 8, ['US', 'UK', 'TW', 'JP', 'DE'])
->ln(12)
// Botón de envío
->buttonField('submit', 45, null, 40, 10, 'Submit', 'submitForm("https://example.com/submit")');Campos de texto y checkbox
$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);Pasa null para $y para usar la posición actual del cursor vertical.
Campos de botón de radio
$pdf->radioField(string $name, float $x, float $y, float $w, float $h, array $prop = []);Los botones de radio con el mismo $name forman un grupo mutuamente excluyente:
$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');Campos de lista, combo box y botón
$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() renderiza una lista desplazable de múltiples filas. comboboxField() renderiza un desplegable de una sola fila. buttonField() crea un botón de acción con una cadena de acción JavaScript opcional.
$pdf->buttonField('reset', 15, null, 40, 10, 'Reset', 'this.resetForm()')
->buttonField('print', 60, null, 40, 10, 'Print', 'this.print()');Propiedades de campo
El arreglo $prop controla la apariencia y comportamiento del campo:
| Clave | Tipo | Descripción |
|---|---|---|
border | array | Estilo de borde con claves width, color, style |
bgcolor | array | Color de fondo como [r, g, b] |
font | string | Nombre de familia de fuente |
fontSize | float | Tamaño de fuente en puntos |
alignment | string | Alineación de texto: left, center, right |
maxLength | int | Conteo máximo de caracteres (campos de texto) |
readonly | bool | Prevenir edición del usuario |
required | bool | Marcar como requerido para validación de formulario |
value | string | Valor predeterminado / inicial |
Aplanamiento de formularios
El aplanamiento convierte todos los campos interactivos en contenido estático no editable. Esto es útil para archivar formularios completados o producir un PDF final de solo lectura.
$pdf->flattenFields(); // Convertir todos los campos de formulario en contenido estáticoDespués del aplanamiento, los valores de los campos se convierten en texto permanente. Los campos ya no pueden ser editados en un visor PDF.