Um ein PDF in CakePHP zu erstellen muss man zum Glück nicht auf ein Plugin oder ähnliches warten, sondern kann vorhandene Bibliotheken nutzen. In diesem kurzen Tutorial greifen wir auf TCPDF zurück.
Vorbereitungen
Zuerst lädt man TCPDF herunter und entpackt es ins Verzeichnis /vendors von cakephp, welches sich auf der gleichen Ebene wie /app und /cake befindet. Man sollte nun ein Verzeichnis /vendors/tcpdf finden.
Anpassungen am Controller
Einen Controller sollte man bereits erstellen können. Wir gehen hier lediglich auf die Methode ein, die man für die Darstellung hinzufügen sollte. Hier ändert sich eigentlich nichts, als wenn man seine Daten auch auf der Webseite anzeigen lassen würde, nur dass man das layout entsprechend anpasst. In dem Beispiel gehen wir davon aus, dass es ein Model namens Bill gibt.
function view($id = null) {
$data = $this->Bill->find('first', array('conditions' => array('Bill.id' => $id)));
$this->set('bill', $data);
$this->layout = 'pdf';
$this->render();
}
Ein Laden der TCPDF – Komponente ist im Controller nicht notwendig. Somit muss man sich nicht um Geschwindigkeitseinbußen sorgen oder einen extra Controller für die PDF-Anzeige erstellen.
Layout
Damit CakePHP nicht das normale Layout rendered, benötigen wir also neben dem default.ctp noch ein weiteres Layout, welches wir pdf.ctp nennen und unter /app/views/layouts/pdf.ctp zu finden sein sollte. In dem Controller haben wir TCPDF bereits mittels $this->layout = 'pdf';
mitgeteilt, dass er diese Datei nutzen soll:
<?php
header('Content-Type: application/pdf');
echo $content_for_layout;
?>
View
In der View wird nun endlich TCPDF geladen und mittels App::import('Vendor','tcpdf/tcpdf');
eingebunden. That’s it! Nun kann man beliebige PDFs erstellen und mittels $bill wie in einer normalen CakePHP-View auf die Daten zugreifen.
<?php
App::import('Vendor','tcpdf/tcpdf');
// ganz viel Code zum Erstellen von PDFs
// z.B. http://www.tecnick.com/pagefiles/tcpdf/example_001.phps
$pdf->Output('bill.pdf', 'I');
?>
Wieder einmal erkennt man das CakePHP eine gute Lösung zum Umgang mit externen Ressources gefunden hat. Die Codeänderungen bleiben übersichtlich und man kommt schnell zum gewünschten Resultat.
Schreibe einen Kommentar