Signatur
Beschreibung
fdf_add_doc_javascript() erlaubt es, JavaScript-Code direkt in ein FDF-Dokument (Forms Data Format) einzubetten. Der Code wird unter einem frei wählbaren Namen registriert und kann beim Laden des FDF-Dokuments im Adobe Acrobat Reader ausgeführt werden, um z. B. Felder zu validieren, zu berechnen oder vorzubelegen.
FDF-Dokumente werden typischerweise verwendet, um Formulardaten unabhängig vom eigentlichen PDF zu transportieren. JavaScript in FDF ermöglicht es, clientseitige Logik mit den Formulardaten zu verknüpfen – etwa um nach dem Import der Daten automatisch eine Berechnung anzustoßen oder den Nutzer auf fehlende Pflichtfelder hinzuweisen.
Der Parameter script_name dient als eindeutiger Bezeichner innerhalb des FDF-Dokuments. Mehrere JavaScript-Blöcke können unter verschiedenen Namen eingefügt werden. Die eigentliche Ausführungsreihenfolge hängt vom PDF-Viewer ab.
Diese Funktion ist Teil der FDF-Erweiterung (ext/fdf), die die Acrobat FDF Toolkit Library voraussetzt und in modernen PHP-Versionen nicht mehr standardmäßig verfügbar ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fdf_document Pflicht | resource | Eine FDF-Dokument-Ressource, die zuvor mit fdf_create() oder fdf_open() erzeugt wurde. |
|
| $script_name Pflicht | string | Ein eindeutiger Name für den JavaScript-Block innerhalb des FDF-Dokuments. Dient als Bezeichner, um den Code später zu identifizieren oder zu überschreiben. | |
| $script_code Pflicht | string | Der eigentliche JavaScript-Quellcode, der in das FDF-Dokument eingebettet wird. Es handelt sich um Acrobat-JavaScript, nicht um Standard-Browser-JavaScript. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige FDF-Ressource).Beispiele
JavaScript-Block in FDF-Dokument einbetten
<?php
// Neues FDF-Dokument erzeugen
$fdf = fdf_create();
// Formularfeld-Wert setzen
fdf_set_value($fdf, 'Vorname', 'Max');
fdf_set_value($fdf, 'Nachname', 'Mustermann');
// JavaScript-Code hinzufügen, der nach dem Laden ausgeführt wird
$jsCode = 'app.alert("Formular wurde erfolgreich geladen!");';
fdf_add_doc_javascript($fdf, 'begruessung', $jsCode);
// FDF-Ausgabe an den Browser senden
header('Content-Type: application/vnd.fdf');
fdf_save($fdf);
fdf_close($fdf);
?>
Berechnungs-Skript in FDF einbetten
<?php
$fdf = fdf_create();
// Mehrere JavaScript-Blöcke unter verschiedenen Namen einfügen
$validierungsCode = '
var netto = this.getField("Netto").value;
var mwst = netto * 0.19;
this.getField("MwSt").value = mwst.toFixed(2);
this.getField("Brutto").value = (parseFloat(netto) + mwst).toFixed(2);
';
fdf_add_doc_javascript($fdf, 'berechne_mwst', $validierungsCode);
$hinweisCode = 'app.alert("Bitte alle Pflichtfelder ausfüllen.", 1);';
fdf_add_doc_javascript($fdf, 'pflichtfeld_hinweis', $hinweisCode);
header('Content-Type: application/vnd.fdf');
fdf_save($fdf);
fdf_close($fdf);
?>
// Wichtig · Fallstricke
Verfügbarkeit: Die FDF-Erweiterung (ext/fdf) ist seit PHP 5.3 als PECL-Paket ausgelagert und wird in aktuellen PHP-Versionen (ab PHP 7+) praktisch nicht mehr gepflegt. Für moderne Projekte sollten Alternativen wie FPDF, TCPDF oder PDF-Parser-Bibliotheken in Betracht gezogen werden.
Sicherheit: Da der JavaScript-Code direkt in das FDF-Dokument geschrieben und im Kontext von Adobe Acrobat ausgeführt wird, darf kein vom Nutzer eingegebener, ungeprüfter Code übergeben werden. Acrobat-JavaScript hat Zugriff auf Dateisystem-Operationen und App-Funktionen des Readers – eine Injektion könnte schwerwiegende Folgen haben.
Kompatibilität: Der eingebettete JavaScript-Code wird nur in Adobe Acrobat/Reader interpretiert. Andere PDF-Viewer (z. B. Browser-integrierte Viewer) ignorieren FDF-JavaScript in der Regel vollständig.