Kategorie-Archiv: Technik

Beiträge zu technischen Themen

PHP fpdf Test schreiben mit wirte() um Umlauten

Die letzte Beitrag beschrieben Methode cell ermöglich wesentlich mehr Einstellungen als wirte() hat aber den Nachteil, dass Text der über die Breite der Zelle hinaus geht einfach abgeschnitten ist.

Mit wirte() können weniger Einstellungen vorgenommen werden, dafür der Text am Ende der Zeile automatisch umgebrochen.

$temp = „Dieser Text ist so lange, dass er nicht in einer einzigen Zeile Platz hat. Spätestens jetzt aber. Allerspätestens aber jetzt.“;
$pdf->Write(15, $temp);

Obige Zeilen weisen zuerst der Variable $temp einen String zu. Dieser wird dann über die Write-Funktion ausgegeben. Der erste Parameter gibt dabei die Höhe der Zeile an.

Genaueres hier.

Die bisherigen Ausgaben können je nach Browser und Server noch Probleme mit Umlauten haben, sodass z.B. Ü,ö oder ß nicht richtig dargestellt werden. Das wird verhindert indem der auszugebende String zuerst mit:

$temp = utf8_decode($temp);

in das richtige Format umgewandelt wird. Danach sollten die gängigen deutschen Umlaute richtig dargestellt werden.

PHP fpdf „Hallo Welt“, Konstruktor und Ausgabe

Im folgenden wird .pdf Dokument erzeugt in dem „Hallo Welt“ steht.

  1. $pdf=new FPDF();
  2. $pdf->AddPage();
  3. $pdf->SetFont(‚Arial‘,’B‘,16);
  4. $pdf->Cell(40,10,’Hallo Welt‘);
  5. ob_start();
  6. $pdf->Output();
  7. ob_end_flush();

Die Zeile 1 erstellt ein Objekt der FPDF Klasse, die im vorherigen Beitrag eingebunden wurde.

Die Zeilen 2 bis 4 erzeugen im .pdf eine leere Seite, stellen eine Schriftgröße ein und fügen die Zeile „Hallo Welt“ hinzu. Die einzelnen Befehle werden später noch behandelt.

Zeile 6 erzeugt, dann das eigentliche Datei und öffnet sie im Browser.

Die Zeilen 5 und 7, aktivieren den temporär den Ausgabepuffer. Je nach Einstellung des Webservers können sie auch weggelassen werden. Bei manchen Serverkonfigurationen führt ein Weglassen jedoch zu einem Fehler.

Achtung Fehlergefahr

Die Programmierung der fpdf Bibliothek ist an einzelnen Stellen nicht so ausgereift wie das bei PHP Standardfunktionen der Fall ist. Lt. fpdf Beschreibung gibt es eine Default-Schriftart und Größe wenn keine Schriftart eingestellt wurde. Praktisch führte bei mir aber das Weglassen des SetFont Aufrufes zu einem nicht validen .pdf Dokument und somit zu einer Fehlermeldung im Browser.

Der Konstruktor

Beim erstellen eines neues fpdf Objektes (Zeile 1) wird automatisch der Konstruktor der fpdf Klasse aufgerufen. Dem Konstruktor können dabei 3 optionale Parameter übergeben werden:

  • orientation mit den Werten „P“ für Hochformat und „L“ für Querformat
  • unit mit der Angabe in welcher Maßeinheit die Längenangaben für dieses Dokument angegeben werden. Möglich sind „pt“ für Punkt, „mm“ für Millimeter, „cm“ für Zentimeter und „in“ für Inch.
  • format für das Format des Dokuments mit den Möglichkeiten „A3“, „A4“, „A5“, „Letter“ und „Legal“

Mit $pdf = new FPDF(); wird der Konstruktor mit den Defaultwerten „Hochformat“ „Millimeter“ und „A4“ aufgerufen.

Der Aufruf:

$pdf = new FPDF(„L“, „cm“, „A3“);

würde ein .pdf Objekt mit den Einstellungen „Querformat“, Längenangaben in „Zentimetern“ und Papierformat „A3“ bewirken.

Hier gibts ausführlicher Informationen zum Konstruktor.

 

Die Ausgabe der .pdf Datei

Mit $pdf->Output(); wird die Datei im Browser Angezeigt.

Der Funktion Output() können zwei Parameter übergeben werden. Der erste gibt den Dateinamen mit .pdf an, z.B. „Report.pdf“.

Der zweite Parameter steuert die Art der Ausgabe und kann folgende Werte haben:

  • „I“ zeigt die Datei im Browser an, klickt der Benutzer auf „Speicher unter“ wird der Angegebene Dateiname als Name vorgeschlagen.
  • „D“ sendet die Datei an den Browser aber ohne sie Anzuzeigen, es wird direkte der Dialog angezeigt, der das Speicher oder das externe öffnen im jeweiligen .pdf Reader ermöglicht.
  • „F“ speichert das Dokument am Server.
  • „S“ liefert das Dokument als Zeichenkette.

Mit $pdf->Output(„Report.pdf“,“D“); öffnet sich im Browser z.B. eine Dialog der entweder das Speichern mit dem Dateinamen „Report.pdf“ oder das öffnen mit dem .pdf Reader vorschlägt.

Hier gibts mehr Informationen zur Output-Fuktion.

 

PHP .pdf Erstellen mit fpdf

Es gibt zahlreiche PHP Bibliotheken mit denen automatisiert Daten als .pdf Datei ausgegeben werden können.

Im folgenden wird die Bibliothek fpdf verwendet. Die Bibliothek ist frei Verfügbar und ist im Internet leicht zu finden. Hier zum Beispiel.

Zur Installation wird die Bibliothek heruntergeladen und entpackt. Dann muss sie auf den benutzen Server hinzugefügt werden. Z.B. indem man im aktuellen Projekt einen Ordner mit Namen fpdf erstellt und einfach alles hineinkopiert. Es muss dann nur noch die Datei fpdf.php mit include eingebunden und die Bibliothek kann benutzt werden.

Wer ein wenig eleganter haben möchte überprüft beim Einbindung im Programm auch gleich ob die Datei vorhanden und einsatzbereit ist. Ein schöner Beispiel Code ist hier zu finden.

Die Bibliothek darf kostenlos verwendet werden.

Hier gehts weiter mit einem einfachen Beispiel.

 

HTML Eingabeobjekte für das Senden der Daten an den Server/PHP

Das Textfeld:

Ein Textfeld kann wie folgt in HTML definiert werden:

<input name=“nameDesFeldes“ size=“40″ maxlength=“20″ value=“Standardwert“ readonly=“readonly“ />

Der Browser stellt das Inputobjekt als einzeiliges Textfeld dar. Alle Eigenschaften sind optional.

name dient als eindeutige Bezeichnung für das Textfeld, z.B. um dann am Server mittels PHP auf das jeweilige Textfeld zugreifen zu können.

size gibt die Länge des Textfeldes an

maxlength gibt die max Anzahl an Zeichen an, die eingegeben werden können

mit value kann ein Standardwert eingegeben werden, der schon am Beginn im Textfeld steht, der Benutzer kann dann wählen ob er den Text überschreiben oder es einfach beim Standardwert  belassen möchte

wird readonly auf „readonly“ gesetzt kann der Benutzer das Textfeld nicht verändern

mehrzeilige Textfelder

Mehrzeilige Textfelder können wie folgt definiert werden:

<textarea name=“text2″ cols=“5″ row=“5″ readlonly=“readonly“> Standardtext im Textfeld </textarea>

Die Eigenschaften name und readonly können wie beim einzeiligen Textfeld verwendet werden. col und row geben Breite und Höhe des Textfeldes an. Soll ein Standardwert schon zu Beginn im Textfeld angezeigt werden, wird dieser nicht über die val Eigenschaft gesetzt, sondern als Text in das Tag geschrieben.

Textfelder deren Eigenschaften/Verhalten nicht mit Javascript und CSS definiert werden, sehen in verschiedenen Browsern leider unterschiedlich aus. In manchen Browsern haben sei einen Scrollbalken und/oder kann der Benutzter die Größe mit der Maus verändern, in anderen Browsern haben sie das nicht.

besondere Textfelder

Es gibt zwei Eigenschaften mit denen besondere Textfelder erzeugt werden können, type=“Password“ und type=“hidden“.

Mit:

<input type=“password“ name=“pwort“ />

wird ein Textfeld speziell die Passworteingabe erzeugt. Gibt der Benutzer hier etwas ein, erscheint im Textfeld nicht die Benutzer Eingabe sondern ****, sodass niemand die Passworteingabe am Bildschirm beobachten kann. Übertragen wird natürlich das Passwort und nicht die ****.

Für dieses Verhalten ist der jeweilige Browser verantwortlich. Am PC ist dieses Verhalten von allen Browsern gleich umgesetzt. Wird die Webseite jedoch mit einem Handy geladen, sieht es anders aus, manchen Handybrowser zeigen das Passwort am Bildschirm (wohl um den User Tippfehler anzuzeigen). Auf mobilen Endgeräten ist das Verhalten somit vom Browser abhängig.

Mit:

<input type=“hidden“ name=“versteckt“ val=“Botschaft“ />

wird ein unsichtbares Textfeld erzeugt, dass vom Benutzer auch nicht veränderbar ist.

Wird zum Beispiel ein Programm am Server von zwei unterschiedlichen Webseiten aufgerufen, könnte man auf jeder Seite eine unsichtbare „Botschaft“ mit so einem „hidden“ Textfeld mit an der Server schicken. Das PHP Programm weiß dann ob es von der Seite A oder der Seite B aus aufgerufen wurde.

Radiobutton Gruppen

<h1> Auswahl </h1>

<p>

<input type=“radio“ name=“optionen“ val=“opt1″ checked=“checked“ /> Option 1 <br />

<input type=“radio“ name=“optionen“ val=“opt2″  /> Option 2 <br />

<input type=“radio“ name=“optionen“ val=“opt3″ /> Option 3 <br />

</p>

Obige Definition erzeugt drei Radiobuttons mit der Überschrift „Auswahl“ und den Beschriftungen „Option 1“, „Option 2“ und „Option 3“. Die Eigenschaft name muss bei allen Radiobuttons einer Gruppe gleich sein. Beim Senden des Formulars an den Server wird in der Eigenschaft name der val Wert jenes Radiobutton übermittelt der ausgewählt ist.

Mit der Eigenschaft checked kann definiert werden, welcher Button vorausgewählt wird.

Listenfeld

Statt über Radiobuttons kann eine Auswahl auch über eine Liste erfolgten. Folgendes Beispiel erzeugt die gleiche Auswahl wir vorher über die Radiobuttons mit einem Listenfeld:

<h1> Auswahl </h1>
<p>

<select name=“optionen“>

<option value=“opt1″ selected > Option 1 </option>
<option value=“opt2″ > Option 2 </option>
<option value=“opt3″ > Option 3 </Option>

</select>

</p>

Es wurde eine Listenauswahl mit Optionen erzeugt. Wird das Formular an der Server gesendet, wird die Eigenschaft name auf den jeweils selektierten „value“-Wert gesetzt.

Mit selected kann definiert werden, welcher Wert vorausgewählt sein soll.

Kontrollkästechen

Inhalt folgt.

mehrfaches Auswahlmenü

Inhalt folgt.

PHP number_format()

Die Funktion number_format ist vor allem dann recht praktisch, wenn zahlen im europäischen Format (mit . als Tausendertrennzeichen und , als Dezimalzeichen) ausgegeben werden sollen.

$a = 1223.667;

echo „number_format($a)“;

gibt „1,224“ aus, rundet somit auf ganze Zahlen mit „,“ als Tausendertrennzeichen

echo „number_format($d,2)“;

gibt 1,223.67 aus, rundet auf die gewünschte Anzahl an Nachkommastellen (hier 2)

echo „number_format($d,2,“,“,“.“)“;

gibt 1.223,67 aus, wie im vorherigen Beispiel nur mit „,“ und „.“ als Trennzeichen im europäischen Format

PHP Funktionen

Eine php Funktion sieht so aus:

function addBtoA($A, $B)
{

$A += $B;

return ($A);

}

$A und $B sind Parameter, $A wird über die return Anweisung auch wieder zurück gegeben.

Als Parameter und Rückgabewerte sind Zeichenketten, Zahlen und Felder möglich, beides ist aber optional.

mit

function addBtoA(&$A, &$B)
{

$A += $B;

}

Mit dem &-Zeichen vor dem Parameter wird definiert, dass der Parameter als Referenz (statt als Kopie) auf die Variable übergeben wird. $A wird also real verändert, die Notwendigkeit des return entfällt.

Die Übergabe als Referenz ist wichtig wenn in der Funktion mehr als eine Variable Verändert werden soll, da über return nur eine Variable zurück gegeben werden kann.

mit

function addBtoA($A, $B=3)
{

$A += $B;

return ($A);

}

wird dem Parameter $B ein Standardwert übergeben. Die Funktion kann jetzt ohne $B aufgerufen werden:

$z = addBtoA($wert);

in diesem Fall wird zur Variable $wert, statt eines zweiten Parameter der Standardwert 3 addiert.

 

 

PHP Datenfelder

Werte können wie folgt an Datenfelder übergeben werden:

$werte = array(12.3, 17.9, 22, 11.4);

$werte = [12.3, 17.9, 22, 11.4];

Folgende Anweisung überschreibt dann den Wert 22 mit 24:

$werte[2] = 24;

im Zusammenhang mit Feldern gibt es die spezielle Schleifenstruktur foreach():

foreach ($werte as $wert)
{
echo „Wert: “ . $wert . „<br />“;
}

Obige Schliefe gibt alle Elemente des Felds $werte Zeilenweise aus.

PHP break und continue

Mit break; werden Schleifen sofort beendet, das Programm wird mit der nächsten Zeile nach der Schleife fortgesetzt.

continue; bricht dagegen nur den jeweiligen Schleifendurchlauf sofort ab. Nach der continue; Anweisung wird die Schleife mit dem nächsten Durchlauf fortgesetzt.

PHP while und do while Schleifen

 

while Schleife

<?php

$summe = 0;
while ($summe <= 1000)

{  // es werden solange zahlen zwischen 1 und 100 addiert bis 1000 erreicht ist

$z = rand(1,100);

$summe += $z;

echo „Die Summe beträgt aktuell:“ . $summe . „<br />“;

}
echo „Mit: “ . $summe . „wurden die 1000 überschritten! <br />“;

?>

do … while Schleife

<?php

$summe = 0;

do

{  // es werden solange zahlen zwischen 1 und 100 addiert bis 1000 erreicht ist

$z = rand(1,100);

$summe += $z;

echo „Die Summe beträgt aktuell:“ . $summe . „<br />“;

}

while ($summe <= 1000)
echo „Mit: “ . $summe . „wurden die 1000 überschritten! <br />“;

?>