PDF Form Filler =============== Version 1.3 23.04.2008 (c) 2008 by Lars Wegmann mail: info@wegmann-it.de www: http://www.wegmann-it.de url: http://www.wegmann-it.de/php_pdf_form_filler.html tel: 03647 50 29 95 Beschreibung ------------ - füllt serverseitig PDF-Formular Vorlagen(Templates) aus, welche mit Adobe Acrobat, OpenOffice etc erzeugt wurden - Werte für Feldinhalte können aus Datenbank, HTML-Formular, Textdateien etc stammen - Ausgabe der befüllten PDF wahlweise oder in Kombination: > an browser > per mail > als Datei ins Filesystem - die Feldinhalte des erzeugten PDF-Formulars können(bei Bedarf) nachträglich vom Benutzer geändert werden - es werden keine serverseitigen PDF-Erweiterungen/Bilbliotheken wie PDFLib oder Klassen wie FPDF o.ä. benötigt - das Ausfüllen ist nur bei Textfeldern möglich, wobei auch numerische Werte möglich sind - nicht unterstützt werden Checkboxen, Radiobuttons oder andere PDF-Formular Elemente Systemvoraussetzungen --------------------- - Webserverumgebung mit installiertem PHP4.x oder 5.x Lizenzhinweise -------------- -> für private Zwecke oder zum Testen kann dieses Script Lizenzfrei eingesetzt werden. Über einen angebrachten Hinweis oder Link würde ich mich freuen. -> die Lizenzgebühr beträgt 4,95 Eur inkl. 19% MwSt. Diese gilt je Domain, auf der PDF Form Filler eingesetzt wird. Erwerb einer Lizenz inkl. 2 OpenOffice Formular-Vorlagen unter http://www.wegmann-it.de/php_pdf_form_filler_lizenz_erwerben.html Installation/Einbindung der DEMO -------------------------------- 1.) entpacken der ZIP-Datei 2.) hochladen folgender 4 Dateien auf die Webumgebung z.B. via FTP nach www.ihre-domain.de/pdf/ index.html (Demoformular) exec.php (Demoscript) mitgliedsantrag.pdf (Demo PDF-Vorlage) pdf_form_fill.php (enthält Funktionen zum ausfüllen der PDF-Vorlage) 3.) Aufruf der URL im Browser z.B. www.ihre-domain.de/pdf/index.html Anm: die PDF-Vorlage "mitgliedsantrag.pdf" muss lesbar sein, ggf. chmod 755 setzen Anpassung auf eigene Bedürfnisse -------------------------------- 1.) Erstellen einer PDF-Vorlage a) entwerfen Sie Ihre Vorlage z.B. mit OpenOffice, welches PDF und PDF-Formulare von Haus aus unterstützt b) PDF-Form Filler arbeitet nach dem "Suchen und Ersetzen"(Search&Replace) Verfahren. Das Füllen der Felder geschieht nicht über den Feldnamen sondern über den vorbelegten Feldinhalt. Dieser muß einmal beim erstellen der PDF-Vorlage und anschließend im Programmteil unter 2.) definiert werden. Vergeben Sie also allen Textfeldern, die später durch pdf_form_fill.php mit dynamischen Werten befüllt werden sollen, einen eindeutigen Standardtext(vorbelegten Feldinhalt). z.B. "AUTO-Name*****************************************" für das Feld Nachname [50 Zeichen] z.B. "AUTO-Vorname**************************************" für das Feld Vorname [50 Zeichen] z.B. "AUTO-Titel****************************************" für das Feld Titel [50 Zeichen] z.B. "AUTOP" für das Feld PLZ [ 5 Zeichen] c) Die Sterne dienen als Platzhalter. Wählen Sie bitte für jedes Textfeld eine ausreichende Zeichen-Länge für den Standardtext. Dies ist notwendig, um sicherzugehen, daß die dynamisch eingetragenen Werte kleiner oder maximal gleich der Länge des Standardtextes ist. Ist eines der dynamisch ausgefüllten Felder länger als die Zeichenlänge der Standardtextes, wird der Ausfüll-Prozess abgebrochen und es erscheint eine Fehlermeldung: -> Ziel-String strlen(String[dynamischer Wert]) ist länger als Quellstring strlen(String[Vorbelegung]) Der Abbruch ist notwendig, da ansonsten die interne Dateistruktur der PDF-Vorlage beschädigt würde, was zu einer Fehlermeldung in Adobe Acrobat Reader führt. Die Originalvorlage bleibt in jedem Falle davon unberührt. Die Bezeichnung "AUTO-Name*****************************************" dient als Bsp, Sie müssen nicht zwangsläufig diese Form wählen. Sie könnten stattdessen auch: "$FD1*****************************************", "$FD2*****************************************", "$FD3*****************************************" usw oder andere Bezeichner/Vorbelegungswerte (auch uneinheitliche) verwenden. WICHTIG: Die Vorbelegungswerte sollten mindestens eine Länge von 3 Zeichen, besser 4 Zeichen oder größer besitzen. Andernfalls könnten unerwünschte Ersetzungen in der PDF-Vorlage entstehen, was i.d.R zu Fehlermeldungen beim öffnen im Adobe Reader führt. 2.) Anpassen der exec.php oder integration in eigene Scripte Die in exec.php enthaltenen Zeilen enthalten alle 4 relevanten Angaben. Diese können Sie in eigene Scripte übernehmen. require("pdf_form_fill.php") // bindet die Datei "pdf_form_fill.php" ins aktuelle Script ein $pdf_template = "mitgliedsantrag.pdf"; // dieser Variable wird der Name der PDF-Vorlage zugewiesen $pdf_form_values = array (); // Das Array kann beliebig viele Werte enthalten Bsp.: $pdf_form_values = array ( "AUTO-Name*****************************************" => "Mustermann", "AUTO-Vorname**************************************" => row['vorname'], "AUTO-Vorname**************************************" => $_POST['titel'], "AUTOP" => rand(0,99999) ); $filled_pdf = generate_pdf($pdf_template, $pdf_form_values); // Funktionsaufruf zum ausfüllen und generieren der PDF-Datei 3.) Ausgabe der befüllten PDF ... > an Browser pdf_to_browser($filled_pdf, $filename); > per mail pdf_to_mail($filled_pdf, $filename, $to, $fromname, $fromemail, $subject, $message); > als Datei ins Filesystem pdf_to_file($filled_pdf, $path.$filename); Hinweis: - es können gleichzeitig mehrere Ausgabearten aktiviert werden Fehler: ----------- ### bei Aufruf von generate_pdf() ..."Ziel-String strlen($dest) länger als Quellstring strlen($src)" -> erweitern Sie den Standardtext in der PDF-Vorlage sowie analog dazu im Array $pdf_form_values ..."keine pdf gefunden" -> passen Sie Pfad und Dateiname der Variable $pdf_template an ..."pdf-template konnte nicht geöffnet werden => ist evtl beschädigt" -> setzen sie chmod 755 auf Ihr PDF-Template bzw stellen Sie sicher, daß die Datei nicht beschädigt ist ..."Array $pdf_form_values enthält keine Werte" -> setzen Sie $pdf_form_values = array ( "vorbelegeter StdText" => "dynamischer Text" ); ..."in PDF-Vorlage ist Vorbelegungswert nicht enthalten": Das Array $pdf_form_values enthält einen Vorbelegungswert, der in der PDF-Vorlage nicht definiert ist. -> Geben Sie in der PDF-Vorlage exakt(Klein/Großschreibung beachten) denselben Vorbelegungswert wie unter $pdf_form_values an. -> Insofern Sie den Wert nicht benötigen, entfernen Sie Ihn auch noch aus dem Array $pdf_form_values. ### bei Aufruf von pdf_to_file() ..."kein pdf-inhalt angegeben." -> stellen Sie sicher, daß $filled_pdf durch generate_pdf() gesetzt wurde (einen Wert -> die befüllte PDF als String enthält) ..."kein dateiname angegeben." -> geben Sie einen Dateiname an. z.b. $filename = "dokument.pdf" ..."kann die datei $filename nicht öffnen" -> stellen Sie sicher, daß sich Pfad und Datei innerhalb Ihres Zugriffsbereichs befinden ... innerhalb Ihrer Homepage(bei absoluter Pfadangabe) -> machen Sie das übergeordnete Verzeichnis Schreibbar, setzen sie es auf chmod 775 oder 777 ..."kann in die datei $filename nicht schreiben" -> stellen Sie sicher, daß sich Pfad und Datei innerhalb Ihres Zugriffsbereichs befinden ... innerhalb Ihrer Homepage(bei absoluter Pfadangabe) -> machen Sie das übergeordnete Verzeichnis Schreibbar, setzen sie es auf chmod 775 oder 777 ### bei Aufruf von pdf_to_mail() ..."kein pdf-inhalt für attachment angegeben" -> stellen Sie sicher, daß variable $filled_pdf durch die funktion generate_pdf() gesetzt wurde (Variable enthält die befüllte PDF als String) ..."kein dateiname angegeben" -> geben Sie einen Dateiname an. z.B. $filename = "dokument.pdf"; ..."keine empfängeradresse angegeben" -> geben Sie $to z.B. $to = "kundenname@kundendomain.com"; ..."empfängeradresse ist ungültig" -> stellen Sie sicher, daß das Format(Aufbau) der empfängeradresse gültig ist z.B. $to = "kundenname@kundendomain.com"; ..."kein absendername angegeben" -> vegeben Sie einen Absendername z.B. $fromname = "Vorname Nachname"; ..."keine absendermailadresse angegeben" -> vegeben Sie eine Absendermailadresse z.B. $fromname = "info@ihre-domain.com"; ..."absendermailadresse ist ungültig" -> stellen Sie sicher, daß das Format(Aufbau) der Absendermailadresse gültig ist z.B. $fromname = "info@ihre-domain.com"; ..."kein betreff angegeben" -> vergeben Sie einen Betreff z.B. $subject = "Ihre Anmeldung als PDF"; ..."keine nachricht angegeben" -> vergeben Sie eine Nachricht z.B. $message = "Sehr geehrter Kunde, ...."; ### bei Aufruf pdf_to_browser() ..."kein pdf-inhalt angegeben." -> stellen Sie sicher, daß variable $filled_pdf durch die funktion generate_pdf() gesetzt wurde (Variable enthält die befüllte PDF als String) ..."kein dateiname angegeben" -> geben Sie einen Dateiname an. z.B. $filename = "dokument.pdf";