Start · Sprachen · PHP · Referenz · fdf_add_doc_javascript

fdf_add_doc_javascript

Funktion

Fügt einen benannten JavaScript-Code-Block in ein FDF-Dokument ein, der beim Öffnen des zugehörigen PDF-Formulars ausgeführt wird.

seit PHP 4.3.0 Kategorie: io

Signatur

fdf_add_doc_javascript(resource $fdf_document, string $script_name, string $script_code): bool

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

Typ
bool
Beschreibung
Gibt 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.