Skip to content

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étodoTipo 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

php
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

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);

Pasa null para $y para usar la posición actual del cursor vertical.

Campos de botón de radio

php
$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:

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

Campos de lista, combo box y botón

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() 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.

php
$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:

ClaveTipoDescripción
borderarrayEstilo de borde con claves width, color, style
bgcolorarrayColor de fondo como [r, g, b]
fontstringNombre de familia de fuente
fontSizefloatTamaño de fuente en puntos
alignmentstringAlineación de texto: left, center, right
maxLengthintConteo máximo de caracteres (campos de texto)
readonlyboolPrevenir edición del usuario
requiredboolMarcar como requerido para validación de formulario
valuestringValor 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.

php
$pdf->flattenFields();  // Convertir todos los campos de formulario en contenido estático

Después del aplanamiento, los valores de los campos se convierten en texto permanente. Los campos ya no pueden ser editados en un visor PDF.

Distribuido bajo la licencia LGPL-3.0-or-later.