Skip to content

JavaScript

I documenti PDF possono contenere JavaScript incorporato che viene eseguito nel visualizzatore. TCPDF-Next fornisce metodi per aggiungere script livello-documento tramite Content\JavaScriptManager, accessibile tramite l'API fluente Document.

Tutti i metodi restituiscono static, quindi ogni chiamata può essere concatenata.

Riferimento Rapido

MetodoScopo
includeJS()Aggiungi JavaScript livello-documento (esegue quando il PDF si apre)
addJavascriptObject()Aggiungi JavaScript come oggetto PDF nominato

Esempio Base

php
use Yeeefang\TcpdfNext\Core\Document;

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

    // JavaScript livello-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);
        }
    ')

    // Campi form che usano il 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

Il supporto JavaScript varia per visualizzatore PDF. Adobe Acrobat ha supporto completo per l'API Acrobat JavaScript. Foxit Reader supporta la maggior parte delle funzionalità. I visualizzatori basati browser e app anteprima generalmente non eseguono JavaScript PDF.

includeJS()

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

Aggiunge JavaScript livello-documento che viene eseguito quando il PDF è aperto. Usa questo per definizioni funzione, variabili globali e logica inizializzazione.

ParametroTipoDescrizione
$scriptstringCodice JavaScript grezzo

Chiamate multiple appendono script aggiuntivi. Vengono eseguiti nell'ordine in cui sono aggiunti.

addJavascriptObject()

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

Aggiunge JavaScript come oggetto PDF nominato. Utile quando gli script devono essere referenziati da altri oggetti PDF (azioni, annotazioni) piuttosto che eseguire all'apertura documento.

Azioni JavaScript su Campi Form

I campi form supportano trigger azione JavaScript tramite il loro array opzioni. Queste azioni si attivano in risposta all'interazione utente con il campo.

AzioneTrigger
onFocusIl campo riceve focus
onBlurIl campo perde focus
onChangeIl valore campo cambia
validatePrima che il valore sia committed
calculateQuando campi dipendenti cambiano
formatDopo che il valore è committed (formatta visualizzazione)
keystrokeAd ogni battitura tasto
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; }',
]);

Trigger Stampa e Azioni Apertura

Esegui logica quando il documento è aperto o stampato:

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

Suggerimenti

  • Mantieni script concisi. Blocchi grandi aumentano dimensione file e rallentano apertura documento.
  • L'API Acrobat JavaScript è documentata nel JavaScript for Acrobat API Reference di Adobe.
  • Testa PDF interattivi in Adobe Acrobat per assicurare compatibilità completa prima di distribuire.
  • Gli standard PDF/A proibiscono JavaScript. Non includere script se punti alla conformità PDF/A.
  • Per calcoli, usa funzioni Acrobat integrate (AFNumber_Format, AFSimple_Calculate, ecc.) dove possibile.

Rilasciato sotto licenza LGPL-3.0-or-later.