Skip to content

JavaScript

Les documents PDF peuvent contenir du JavaScript intégré qui s'exécute dans le lecteur. TCPDF-Next fournit des méthodes pour ajouter des scripts au niveau document via Content\JavaScriptManager, accessible via l'API fluent de Document.

Toutes les méthodes retournent static, permettant le chaînage.

Référence rapide

MéthodeObjectif
includeJS()Ajouter du JavaScript au niveau document (s'exécute à l'ouverture du PDF)
addJavascriptObject()Ajouter du JavaScript comme objet PDF nommé

Exemple de base

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Formulaire interactif avec JavaScript', newLine: true)

    // JavaScript au niveau document
    ->includeJS('
        function validateEmail(field) {
            var email = field.value;
            var re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            if (!re.test(email)) {
                app.alert("Veuillez entrer une adresse email valide.");
                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);
        }
    ')

    // Champs de formulaire utilisant le 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

Le support JavaScript varie selon les lecteurs PDF. Adobe Acrobat a un support complet de l'API Acrobat JavaScript. Foxit Reader supporte la plupart des fonctionnalités. Les lecteurs basés sur navigateur et les applications de prévisualisation n'exécutent généralement pas le JavaScript PDF.

includeJS()

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

Ajoute du JavaScript au niveau document qui est exécuté à l'ouverture du PDF. Utilisez pour les définitions de fonctions, variables globales et logique d'initialisation.

ParamètreTypeDescription
$scriptstringCode JavaScript brut

Les appels multiples ajoutent des scripts supplémentaires. Ils s'exécutent dans l'ordre d'ajout.

addJavascriptObject()

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

Ajoute du JavaScript comme objet PDF nommé. Utile quand les scripts doivent être référencés par d'autres objets PDF (actions, annotations) plutôt que d'être exécutés à l'ouverture du document.

Actions JavaScript sur les champs de formulaire

Les champs de formulaire supportent les déclencheurs d'actions JavaScript via leur tableau d'options. Ces actions se déclenchent en réponse à l'interaction utilisateur avec le champ.

ActionDéclencheur
onFocusLe champ reçoit le focus
onBlurLe champ perd le focus
onChangeLa valeur du champ change
validateAvant que la valeur soit validée
calculateQuand les champs dépendants changent
formatAprès que la valeur soit validée (format d'affichage)
keystrokeÀ chaque frappe de touche
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("Le prix ne peut pas être négatif."); event.rc = false; }',
]);

Déclencheur d'impression et actions d'ouverture

Exécuter de la logique lorsque le document est ouvert ou imprimé :

php
$pdf->includeJS('
    app.alert("Bienvenue ! Veuillez remplir tous les champs requis.");
')
->includeJS('
    var pp = this.addScript("willPrint", "app.alert(\'Ce document est confidentiel.\');");
');

Conseils

  • Gardez les scripts concis. Les gros blocs augmentent la taille du fichier et ralentissent l'ouverture du document.
  • L'API Acrobat JavaScript est documentée dans la Référence API JavaScript pour Acrobat d'Adobe.
  • Testez les PDF interactifs dans Adobe Acrobat pour assurer une compatibilité complète avant distribution.
  • Les normes PDF/A interdisent JavaScript. N'incluez pas de scripts si vous ciblez la conformité PDF/A.
  • Pour les calculs, utilisez les fonctions Acrobat intégrées (AFNumber_Format, AFSimple_Calculate, etc.) lorsque possible.

Distribué sous licence LGPL-3.0-or-later.