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éthode | Objectif |
|---|---|
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
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()
$pdf->includeJS(string $script): staticAjoute 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ètre | Type | Description |
|---|---|---|
$script | string | Code JavaScript brut |
Les appels multiples ajoutent des scripts supplémentaires. Ils s'exécutent dans l'ordre d'ajout.
addJavascriptObject()
$pdf->addJavascriptObject(string $script): staticAjoute 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.
| Action | Déclencheur |
|---|---|
onFocus | Le champ reçoit le focus |
onBlur | Le champ perd le focus |
onChange | La valeur du champ change |
validate | Avant que la valeur soit validée |
calculate | Quand les champs dépendants changent |
format | Après que la valeur soit validée (format d'affichage) |
keystroke | À chaque frappe de touche |
$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é :
$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.