Skip to content

JavaScript

Los documentos PDF pueden contener JavaScript incrustado que se ejecuta en el visor. TCPDF-Next proporciona métodos para agregar scripts a nivel de documento a través de Content\JavaScriptManager, accesible mediante la API fluida de Document.

Todos los métodos retornan static, por lo que cada llamada puede ser encadenada.

Referencia rápida

MétodoPropósito
includeJS()Agregar JavaScript a nivel de documento (se ejecuta cuando se abre el PDF)
addJavascriptObject()Agregar JavaScript como un objeto PDF con nombre

Ejemplo básico

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Interactive Form with JavaScript', newLine: true)

    // JavaScript a nivel de documento
    ->includeJS('
        function validateEmail(field) {
            var email = field.value;
            var re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            if (!re.test(email)) {
                app.alert("Please enter a valid email address.");
                return false;
            }
            return true;
        }

        function calculateTotal() {
            var qty = this.getField("qty").value;
            var price = this.getField("price").value;
            this.getField("total").value = (qty * price).toFixed(2);
        }
    ')

    // Campos de formulario que usan el JavaScript
    ->textField('email', 45, null, 80, 8, [
        'onBlur' => 'validateEmail(event.target)',
    ])
    ->textField('qty', 45, null, 30, 8)
    ->textField('price', 80, null, 30, 8)
    ->textField('total', 115, null, 40, 8, [
        'readonly' => true,
    ]);

WARNING

El soporte de JavaScript varía según el visor PDF. Adobe Acrobat tiene soporte completo para la API JavaScript de Acrobat. Foxit Reader soporta la mayoría de las funciones. Los visores basados en navegador y las aplicaciones de vista previa generalmente no ejecutan JavaScript de PDF.

includeJS()

php
$pdf->includeJS(string $script): static

Agrega JavaScript a nivel de documento que se ejecuta cuando se abre el PDF. Úsalo para definiciones de funciones, variables globales y lógica de inicialización.

ParámetroTipoDescripción
$scriptstringCódigo JavaScript sin procesar

Las llamadas múltiples agregan scripts adicionales. Se ejecutan en el orden en que se agregan.

addJavascriptObject()

php
$pdf->addJavascriptObject(string $script): static

Agrega JavaScript como un objeto PDF con nombre. Útil cuando los scripts necesitan ser referenciados por otros objetos PDF (acciones, anotaciones) en lugar de ejecutarse al abrir el documento.

Acciones JavaScript en campos de formulario

Los campos de formulario soportan disparadores de acciones JavaScript a través de su arreglo de opciones. Estas acciones se activan en respuesta a la interacción del usuario con el campo.

AcciónDisparador
onFocusEl campo recibe el foco
onBlurEl campo pierde el foco
onChangeEl valor del campo cambia
validateAntes de que el valor se confirme
calculateCuando los campos dependientes cambian
formatDespués de que el valor se confirme (formato de visualización)
keystrokeEn cada pulsación de tecla
php
$pdf->textField('price', 45, null, 40, 8, [
    'format'    => 'AFNumber_Format(2, 0, 0, 0, "$", true);',
    'keystroke' => 'AFNumber_Keystroke(2, 0, 0, 0, "$", true);',
    'validate'  => 'if (event.value < 0) { app.alert("Price cannot be negative."); event.rc = false; }',
]);

Disparador de impresión y acciones de apertura

Ejecuta lógica cuando se abre o imprime el documento:

php
$pdf->includeJS('
    app.alert("Welcome! Please fill in all required fields.");
')
->includeJS('
    var pp = this.addScript("willPrint", "app.alert(\'This document is confidential.\');");
');

Consejos

  • Mantén los scripts concisos. Los bloques grandes aumentan el tamaño del archivo y ralentizan la apertura del documento.
  • La API JavaScript de Acrobat está documentada en la Referencia de API JavaScript para Acrobat de Adobe.
  • Prueba los PDFs interactivos en Adobe Acrobat para asegurar la compatibilidad completa antes de distribuirlos.
  • Los estándares PDF/A prohíben JavaScript. No incluyas scripts si apuntas a cumplimiento PDF/A.
  • Para cálculos, usa funciones integradas de Acrobat (AFNumber_Format, AFSimple_Calculate, etc.) cuando sea posible.

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