{"id":159,"date":"2010-03-12T10:19:40","date_gmt":"2010-03-12T09:19:40","guid":{"rendered":"http:\/\/www.webmaid.de\/?p=159"},"modified":"2010-11-02T02:56:03","modified_gmt":"2010-11-02T01:56:03","slug":"pdf-in-cakephp","status":"publish","type":"post","link":"https:\/\/www.webmaid.de\/2010\/03\/pdf-in-cakephp\/","title":{"rendered":"PDF in CakePHP"},"content":{"rendered":"

Um ein PDF in CakePHP zu erstellen muss man zum Gl\u00fcck nicht auf ein Plugin oder \u00e4hnliches warten, sondern kann vorhandene Bibliotheken nutzen. In diesem kurzen Tutorial greifen wir auf TCPDF zur\u00fcck.
\n<\/p>\n

Vorbereitungen<\/h2>\n

Zuerst l\u00e4dt man TCPDF<\/a> 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.<\/p>\n

Anpassungen am Controller<\/h2>\n

Einen Controller sollte man bereits erstellen k\u00f6nnen. Wir gehen hier lediglich auf die Methode ein, die man f\u00fcr die Darstellung hinzuf\u00fcgen sollte. Hier \u00e4ndert sich eigentlich nichts, als wenn man seine Daten auch auf der Webseite anzeigen lassen w\u00fcrde, nur dass man das layout entsprechend anpasst. In dem Beispiel gehen wir davon aus, dass es ein Model namens Bill gibt.<\/p>\n

function view($id = null) {\r\n\t$data = $this->Bill->find('first', array('conditions' => array('Bill.id' => $id)));\r\n\t$this->set('bill', $data);\r\n\t$this->layout = 'pdf';\r\n\t$this->render();\r\n}<\/code><\/pre>\n

Ein Laden der TCPDF – Komponente ist im Controller nicht notwendig. Somit muss man sich nicht um Geschwindigkeitseinbu\u00dfen sorgen oder einen extra Controller f\u00fcr die PDF-Anzeige erstellen.<\/p>\n

Layout<\/h2>\n

Damit CakePHP nicht das normale Layout rendered, ben\u00f6tigen 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';<\/code> mitgeteilt, dass er diese Datei nutzen soll:<\/p>\n

<?php\r\n\theader('Content-Type: application\/pdf');\r\n\techo $content_for_layout;\r\n?><\/code><\/pre>\n

View<\/h2>\n

In der View wird nun endlich TCPDF geladen und mittels App::import('Vendor','tcpdf\/tcpdf');<\/code> eingebunden. That’s it! Nun kann man beliebige PDFs erstellen und mittels $bill wie in einer normalen CakePHP-View auf die Daten zugreifen.<\/p>\n

<?php\r\nApp::import('Vendor','tcpdf\/tcpdf');\r\n\/\/ ganz viel Code zum Erstellen von PDFs\r\n\/\/ z.B. http:\/\/www.tecnick.com\/pagefiles\/tcpdf\/example_001.phps\r\n$pdf->Output('bill.pdf', 'I');\r\n?><\/code><\/pre>\n

Wieder einmal erkennt man das CakePHP eine gute L\u00f6sung zum Umgang mit externen Ressources gefunden hat. Die Code\u00e4nderungen bleiben \u00fcbersichtlich und man kommt schnell zum gew\u00fcnschten Resultat. <\/p>\n

\n