Martin Hölter: PDF- Dateien erzeugen

Beitrag lesen

Hi Kalle!

Ich habe das ganze wie folgt gelöst:

Ich erstelle ein PDF mit Eingabefeldern, denen ich einen Wert zuweise (mit Adobe Acrobat). Leider sind so keine Checkboxen ausfüllbar.

Dann Datei mit PHP einlesen (fread) und die Default-Werte ersetzen.

Ich zeig dir einfach mal den Code (aus meinen "früheren Tagen", wahrscheinlich relativ unsauber, Kommentare für meinen Chef geschrieben :-):

Das zugrundeliegende PDF.

<?php        //PHP-Bereich wird eingeleitet
$anrede = $HTTP_POST_VARS["Anrede"];    //über den Befehl $HTTP_POST_VARS
$nachname = $HTTP_POST_VARS["nachname"];   //werden die Daten, die in das Formular
$vorname = $HTTP_POST_VARS["vorname"];    //der Datei index.html eingegeben
$strasse = $HTTP_POST_VARS["strasse"];    //wurde, den genanten Variablen
$plz = $HTTP_POST_VARS["plz"];     //zugeordnet.
$ort = $HTTP_POST_VARS["ort"];     //Variablennamen beginnen immer mit "$"
$gdatum = $HTTP_POST_VARS["geburtstag"];   //Das einfache Gleichheitszeichen "="
$telefon = $HTTP_POST_VARS["telefon"];    //ordnet den Variablen den Wert zu.
$telefax = $HTTP_POST_VARS["telefax"];    //Jeder Befehl muss mit einem Strichpunkt ";"
$email = $HTTP_POST_VARS["email"];    //beendet werden.
$konto = $HTTP_POST_VARS["konto"];
$tageslimit = $HTTP_POST_VARS["tageslimit"];
$auftragslimit = $HTTP_POST_VARS["transaktionslimit"];
$dalimit = $HTTP_POST_VARS["dalimit"];
$hgue = $HTTP_POST_VARS["hgue"];
$art = $HTTP_POST_VARS["art"];
$anmeldename = $HTTP_POST_VARS["anmeldename"];
$forbidden = array(00000, 11111, 22222, 33333, 44444, 55555, 66666, 77777, 88888, 99999, 01234, 12345, 23456, 34567, 45678, 56789, 67890, 09876, 98765, 87654, 76543, 65432, 54321, 43210); //Trivial-PINs

for (;;){
srand ((double)microtime()*1000000);
$startpin = str_pad(rand(1, 99999), 5, "0", STR_PAD_LEFT);
if (!(in_array ($startpin, $forbidden))) break;
}

$Wert12Option = $HTTP_POST_VARS["Wert12Option"];
$name = $nachname;      //Der Variablen $name wird der Inhalt der Variablen $nachname übergeben
$name .= ", ";       //dann wird ein Komma und ein Leerschritt zugefügt
$name .= $vorname;      //und der Vorname
$plzort = $plz;       //das gleiche mit PLZ,
$plzort .= " ";       //Leerschritt
$plzort .= $ort;      //Ort. Hierdurch wird einfacher, das pdf zu bearbeiten.
$log=fopen("/homepages/u11973/log/homebanking.txt", a);  //der Befehl fopen öffnet eine Datei, in diesem Fall die log-Datei im Modus a (heisst: nur ans Ende schreiben)
$logtext = date("Y-m-d, H:i:s");    //Die Datei wird der Variablen $log zugeordnet, wodurch sie später angesprochen wird.
$logtext .= "|";
$logtext .= $name;      //Der Variablen $logtext werden das Datum mit der Funktion date(..) und die Inhalte der
$logtext .= "|";      //Formularfelder aus der index.html zugeordnet. Getrennt wird mit "|", damit
$logtext .= $strasse;      //man sich die Datei in Excel vernünftig ansehen kann. Standardzeichen wie das Komma
$logtext .= "|";      //bzw. der Strichpunkt können nicht benutzt werden. Das Komma trennt ja bereits Name und Vorname
$logtext .= $plzort;      //und der Strichpunkt beendet den Befehl.
$logtext .= "|";
$logtext .= $gdatum;
$logtext .= "|";
$logtext .= $telefon;
$logtext .= "|";
$logtext .= $telefax;
$logtext .= "|";
$logtext .= $email;
$logtext .= "|";
$logtext .= $konto;
$logtext .= "|";
$logtext .= $tageslimit;
$logtext .= "|";
$logtext .= $auftragslimit;
$logtext .= "|";
$logtext .= $dalimit;
$logtext .= "|";
$logtext .= $hgue;
$logtext .= "|";
$logtext .= $art;
$logtext .= "|";
$logtext .= $anmeldename;
$logtext .= "|";
$logtext .= $startpin;
$logtext .= "|";
$logtext .= $HTTP_SERVER_VARS["REMOTE_ADDR"];   //Hier wird noch die IP des Kunden aufgezeichnet, um im Betrugsfalle einen Hinweis auf die Identität zu erhalten.
$logtext .= "\n";      //\n bewirkt einen Zeilenumbruch
fwrite($log, $logtext);      //mit diesem Befehl wird in die Datei, die mit $log referenziert wird, der Inhalt der Variablen $logtext geschrieben
fclose($log);       //und die Datei wird geschlossen.
if ($art == "kunde")      //Wenn der Kunde selbst drucken möchte, wird alles, was in geschweifte Klammern "{}" gefasst ist , ausgeführt.
{        //die "if-Zeile" wir nicht mit Strichpunkt abgeschlossen. Das doppelte Gleichheitszeichen "==" Vergleicht den Inhalt der beiden Ausdrücke
$zufall = "./vordrucke/";     //der Variablen $Zufall wird der relative Pfad zum Verzeichnis Vordrucke zugewiesen.
srand(microtime()*1000000);     //Der Zufallsgenerator wird mit einem neuen Startwert "gefüttert"
$zufall .= rand(1,10000);     //Der Variablen $Zufall wird ein zufälliger Zahlenwert im Bereich von 1 bis 10.000 hinzugefügt
$zufall .= ".pdf";      //und die Dateiendung ".pdf" wird hinzugefügt.
if($hgue == "ja")      //die nächste if-Abfrage: Will der Kunde alle Konten sehen? - Hier "ja"
 {       //die öffnende geschweifte Klammer leitet den auszuführenden Teil ein
 $f=fopen('hgue.pdf','r');    //die Datei hgue3.pdf wird geöffnet. Modus "R" heisst nur lesen, ich will ja an der Originaldatei auf keinen Fall etwas verändern
 $pdf=fread($f,filesize('hgue.pdf'));   //über fread wird der Inhalt der Datei in de Variable $pdf eingelesen, damit der Inhalt geändert werden kann.
 }       //die schließende geschweifte Klammer beendet den if-Teil bzgl. der HGÜ, allerdings noch nicht den ersten.
else        //wenn $hgue _nicht_ "ja" beinhaltet, also nicht alle Konten freigeschaltet werden sollen
 {       //ebenfalls geschweifte Klammern
 $f=fopen('keinehgue.pdf','r');    //die andere Datei wird eingelesen
 $pdf=fread($f,filesize('keinehgue.pdf'));  //und an $pdf übergeben
 }       //Ende des else-Teils
fclose($f);       //die mit $f referenzierte Datei brauchen wir nihct mehr, also wird sie geschlossen.
$name=substr(str_pad($name,26),0,26);    //Da die Dateigröße des pdfs gleich bleiben muss, werden die Variablen zuerst mit dem Befehl str_pad($variable, Länge) erweitert
$strasse=substr(str_pad($strasse,25),0,25);   //und dann mit substr gekürzt die 0 ist das erste Zeichen der eichenfolge und die zweite Zahl die Länge, auf die gekürzt wird
$plzort=substr(str_pad($plzort,25),0,25);
$gdatum=substr(str_pad($gdatum,10),0,10);
$telefon=substr(str_pad($telefon,25),0,25);
$telefax=substr(str_pad($telefax,25),0,25);
$email=substr(str_pad($email,31),0,31);
$konto=substr(str_pad($konto,10),0,10);
$tageslimit=substr(str_pad($tageslimit,13),0,13);
$auftragslimit=substr(str_pad($auftragslimit,16),0,16);
$dalimit=substr(str_pad($dalimit,15),0,15);
$anmeldename=substr(str_pad($anmeldename, 15),0,15);
$anmeldename="Anmeldename: ".$anmeldename;
$startpin="Start-PIN: ".$startpin;
$datum="Iserlohn, ";      //Der Variablen $datum wird "Iserlohn, " zugeordnet
$datum.=date("d.m.Y");      //und dann das aktuelle Datum hinzugefügt.
$pdf=str_replace('namevorname012345678901234',$name,$pdf); //Der Variablen $pdf wird das Ergebnis der Funktion str_replace zugeordnet
$pdf=str_replace('strassenr1234567890123456',$strasse,$pdf); //Dieser Funktion werden die Parameter der zu ersetzenden Zeichenfolge (hier: der Standardfeldinhalte im pdf),
$pdf=str_replace('plzort1234567890123456789',$plzort,$pdf); //der neue Inhalt hierfür, also die zurechtgeschnitten Variablen (die Dateigröße muss ja exakt gleich bleiben)
$pdf=str_replace('01.01.2000',$gdatum,$pdf);   //sowie der Bereich, in dem sie suchen soll, übergeben. Sie liefert als Ergebnis die eingelesene pdf-Datei,
$pdf=str_replace('telefon123456789012345678',$telefon,$pdf); //ersetzt jedoch die Standardinhalte durch die Benutzereingaben
$pdf=str_replace('telefax123456789012345678',$telefax,$pdf);
$pdf=str_replace('email12345',$email,$pdf);
$pdf=str_replace('kontonumma',$konto,$pdf);
$pdf=str_replace('uebtageslimit',$tageslimit,$pdf);
$pdf=str_replace('uebauftragslimit',$auftragslimit,$pdf);
$pdf=str_replace('daauftragslimit',$dalimit,$pdf);
$pdf=str_replace('Iserlohn123456789012',$datum,$pdf);
$pdf=str_replace('Anmeldename: 123456789012345',$anmeldename,$pdf);
$pdf=str_replace('Start-PIN: 12345',$startpin,$pdf);
$f=fopen($zufall,'w+');      //Jetzt wird eine neue Datei angelegt. Der Dateiname ist der Inhalt der Variablen $zufall. Die Art ist w+, d.h. die Datei wird angelegt, wenn sie bereits existiert, wird sie überschrieben.
fwrite($f,$pdf);      //in die Datei, die wieder über die Variable $f referenziert werden kann, wird der Inhalt von $pdf, also der ausgefüllte Vertrag, hineingeschrieben.
fclose($f);       //die Datei wird geschlossen.
echo "<html><head><title>Weiterleitung</title>";  //jetzt werden über "echo" html-"Befehle" an den Browser geschickt
echo "<script type=\"text/javascript\">";   //Anführungsstriche müssen mit einem Backslash "\" "maskiert" werden, da sie ansonsten den echo-Befehl beenden würden.
echo "self.location.href=\"",$zufall,"\"";   //JavaScript: Der Browser wird zu dem erzeugten pdf weitergeleitet.
echo "</script></head>";     //der Script- und der Kopf-Bereich werden verlassen
echo "<body>";       //der <body>-Bereich wird geöffnet. In der nächsten Zeile wird den Usern, die JavaScript ausgeschaltet haben, der Hinweis gegeben, dass sie manuell zum pdf gehen müssen.
echo "Sie werden jetzt zu dem Vertrag weitergeleitet. Sollte die automatische Weiterleitung nicht funktionieren, klicken Sie bitte <a href=\"",$zufall,"\">hier</a>.";
echo "</body></html>";      //in der obigen Zeile wurden nicht alle Anführungsstriche maskiert. mit ",$zufall," wird die Variable $zufall in den s.g. String hineingeschrieben.
}        //fertig, wenn der Kunde selbst drucken wollte
elseif ($art == "spk")      //Jetzt beginnt der Teil, der ausgeführt werden soll, wenn der Kunde den Vertrag zugeschickt haben möchte.
{
$mailtext = "Formulardaten aus dem Internet-Formular: Girokonto freischalten für µdirekt per PC"; //der Variablen $mailtext werden die Inhalte aus dem sowie Erklärungstexte hinzugefügt.
$mailtext .= "\n";      //\n bewirkt, wie in dr Logdatei, einen Zeilenumbruch. Das ".="-Zeichen fügt der Variablen jeweils zusätzliche Inhalte hinzu.
$mailtext .= "\n";
$mailtext .= "Anrede:          ";
$mailtext .= $anrede;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Name:            ";
$mailtext .= $nachname;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Vorname:         ";
$mailtext .= $vorname;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Kontonummer:     ";
$mailtext .= $konto;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Straße:          ";
$mailtext .= $strasse;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "PLZ/Ort:         ";
$mailtext .= $plzort;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Telefon:         ";
$mailtext .= $telefon;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Telefax:         ";
$mailtext .= $telefax;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "EMail:           ";
$mailtext .= $email;
$mailtext .= "\n";
$mailtext .= "\n";
$mailtext .= "Girokontonummer \n";
$mailtext .= $konto;
$mailtext .= "\n";
$mailtext .= "-----------------------------------------\n";
$mailtext .= "Transaktion \n";
$mailtext .= $auftragslimit;
$mailtext .= "\n";
$mailtext .= "-----------------------------------------\n";
$mailtext .= "pro Tag \n";
$mailtext .= $tageslimit;
$mailtext .= "\n";
$mailtext .= "-----------------------------------------\n";
$mailtext .= "Dauerauftrag \n";
$mailtext .= $dalimit;
$mailtext .= "\n";
$mailtext .= "-----------------------------------------\n";
$mailtext .= "alle Konten freischalten \n";
$mailtext .= $hgue;
$mailtext .= "\n";
mail("TelefonService-Center@sparkasse-iserlohn.de", "Girokonto freischalten für sdirekt per PC", $mailtext, "From: webmaster@sparkasseiserlohn.de\nReply-To: $email\nX-Mailer: PHP/" . phpversion());
//In der obigen Zeile wurde die Funktion Mail(....) aufgerufen. In den Klammern steht als erstes der Empfänger, dann der Betreff der Mail, dann der Mailtext und dann zusätzliche Angaben, hier der Absender, die Antwortadresse und der verwandte Mail-Client.
$string = "Sehr geehrte";     //Der Variablen $string wird der Text gespeichert, der dem Kunden nach erfolgreichem mailversand angezeigt werden soll.
if ($anrede == "Herr"){      //wenn ein "Herr" vor dem Rechner sitzt, Muss natürlich "Sehr geehrte_r_" ausgegeben werden.
$string .= "r ";
}
else {
$string .= " ";
}
$string .= $anrede;      //die Anrede
$string .= " ";       //ein Leerzeichen
$string .= $nachname;      //und der Nachname werden hinzugefügt, und gleich kommt der Bestätigungstext in html-Form
$string .= "<br><br>wir haben Ihre Anfrage erhalten und werden sie umgehend entsprechend weiterleiten. <br><br> Bitte haben Sie Verständnis dafür, dass wir keine zeitkritischen Aufträge bzw. Erklärungen, wie z.B. Überweisungen, Wertpapierorder oder Kartensperren über diese Funktion annehmen können. Für die termingerechte Bearbeitung übernimmt die Sparkasse keine Haftung.<br><br> Für die gesicherte Entgegennahme und sofortige Ausführung von Überweisungen und Wertpapierorder steht Ihnen unsere Verfahren \"Sdirekt Internetbanking\" zur Verfügung. Kartensperren teilen Sie uns bitte telefonisch über die Nummer der zentralen Sperrannahme mit. Weitere Einzelheiten erläutert Ihnen gerne Ihr Kundenberater<br><br>Ihre<br><br>Sparkasse Iserlohn";
echo $string;       //erst jetzt wird die Bestätigung auf dem Bildschirm ausgegeben,.
}
else
{
echo $art," ist kein g&uuml;tiger Parameter.";   //wenn $art weder "spk" noch "kunde" enthält, kommt die Fehlermeldung, dass der übergebene Parameter falsch ist.
}        //und gleich wird der php-Bereich verlassen (und damit ist in diesem Fall das Dateiende erreicht):
?>

Hoffe, dass du was damit anfangen kannst.

Gruß

Martin