[inhalt]
Projekt BISO 3 - Handbuch

Klassen zur PDF-Brief-Erzeugung

Ein Brief ist generell immer gleich aufgebaut, was ändert sind die einzelnen Inhaltsteile wie Absender, Empfänger, Brief-Inhalt etc. Um die PDF-Brieferzeugung zu vereinfachen, habe ich die Brief-Klassen entworfen, welche das Erstellen von Briefen vereinfachen.

Aufbau eines Briefes

Jeder Standard-Brief besteht aus folgenden Komponenten:

Alle diese Komponenten sind natürlich optional. Zudem hat jeder Brief ein anderes Layout. Die Brief-Klassen sollten dem also Rechnung tragen und verschiedene Brief-Arten zulassen. Um die Darstellung unabhängig vom Inhalt gestalten zu können, habe ich mich wiederum für die Trennung von Daten und Layout mittels Smarty Templates entschieden. Das Erstellen eines Briefes folgt also dem schon aufgezeigten Genereller Workflow: XSL, XML mit Smarty, PDF mit FOP von BISO.

Jeder Brief wird somit mit folgenden Komponenten zusammengestellt:

Die Brief-Klassen

Briefklassen

Die Briefklasse hat also die Aufgabe, die für den Brief relevanten Daten zu sammeln, diese Smarty zu übergeben, welcher die Daten ins Template einfüllt und mit der Klasse FOPExecutor in ein PDF wandelt.

Die Basisklasse AbstractBrief kann selber nicht instantiiert werden, da die Methode prePDF() von Kind-Klassen implementiert werden muss. prePDF() wird kurz vor der Erzeugung des PDF's aufgerufen. Die Kind-klassen haben darin die Möglichkeit, weitere Variablen der Smarty-Klasse zu übergeben.

Folgende Attribute müssen zwingend gesetzt sein, damit ein PDF erzeugt werden kann:

Erstellen einer eigenen Briefklasse

/**
 * Beispiel einer einfachsten Brief-Klasse, welche AbstractBrief implementiert
 */
class SimpleBrief extends AbstractBrief {
    private $inhalt = "";

    public function setInhalt($inhalt) {
        $this->inhalt = $inhalt;
    }

    /**
     * Diese Funktion muss implementiert werden und wird kurz vor Erstellen des PDF's aufgerufen:
     */
    public function prePDF($smarty) {
        $smarty->assign("Inhalt", $this->inhalt);
    }
}

Der Methode prePDF() wird das Smarty-Objekt übergeben, welches für die Template-Erzeugung notwendig ist. In prePDF() kann das Smarty-Objekt um eigene Attribute erweitert werden, welche dann vom Template benutzt werden können.

Erstellen eines Briefes mit den Briefklassen

/**
 * Beispiel:
 * ===============
 * Erzeugen eines Briefes anhand der im obigen Beispiel erstellten SimpleBrief-Klasse
 *
 */
$briefobj = new SimpleBrief();
$briefobj->EmpfaengerPerson = loadPersonObjekt(1); // Setzen des Person()-Objektes für den Empfänger
$briefobj->AbsenderPerson   = loadPersonObjekt(2); // Setzen des Person()-Objektes für den Absender

$briefobj->XSLTemplate     = 'stylesheet.xsl';
$briefobj->SmartyTemplate  = 'smarty-template.tpl';
$briefobj->XMLFilename     = 'tmp.xml';
$briefobj->PDFFilename     = 'output.pdf';

$briefobj->setInhalt("Hallo.\n Dies ist ein ganz simpler Brief.");

$ret = $briefobj->createPDF();