Home > CakePHP, php, Zend Framework > PDF bearbeiten mit Zend Framework in einer CakePHP Anwendung

PDF bearbeiten mit Zend Framework in einer CakePHP Anwendung

February 10th, 2009

Es gibt zur Zeit noch keine PDF Unterstützung in CakePHP. Auch in der Bakery gibt es nur ein Tutorial für die Entwicklung mit TCPDF, aber  danach steht mir heute nicht der Sinn. Vielmehr reizt es mich CakePHP mit dem Zend Framework zu verheiraten. Die Komponente Zend_Pdf kann PDF’s einlesen, bzw. neu anlegen, beschreiben, speichern und noch einges mehr. Ein schönes Stück Software.

CakePHP ist auf dass Einbinden fremder Libraries vorbereitet und bietet dem Zend Framework den Ordner /vendors als Quartier. Über die Konstante VENDORS kann dann auch fleissig inkludiert werden. Da ich gleich das ganze Zend Framework in den Vendor Ordner gepackt ist es nur konsequent diesen in den include_path einzubinden:

// /app/config/bootstrap.php
set_include_path(get_include_path() . PATH_SEPARATOR . VENDORS );

Danach kann es auch im Controller schon losgehen:

function view($id = null) {
 
	// Die Zend_Pdf Komponente einbinden
	require_once("Zend/Exception.php");
	require_once("Zend/Pdf/Exception.php");
	require_once("Zend/Pdf.php");
 
	// Ein bestehendes PDF öffnen
	$pdf = Zend_Pdf::load(VIEWS . "shares/share_template.pdf");
 
	// Einen Font einrichten und registrieren
	$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES_ROMAN);
	$pdf->pages[0]->setFont($font, 10);
 
	// In das PDF schreiben
	$pdf->pages[0]->drawText("Hello World, how are you doing?", 60, 710);
 
	// Und dann schön speichern (Ausserhalb des Webroot)
	$pdf->save(APP."files/shares/".$id.".pdf");
 
	// Einen Media View für die Ausgabe/Download einrichten
	$this->view = 'Media';
	$params = array(
	       'id' => $id.".pdf",
	       'name' => 'HelloWorld',
	       'download' => true,
	       'extension' => 'pdf',
	       'path' => 'files' . DS . 'shares' . DS
	);
	$this->set($params);
}

Der Umgang mit der Komponente Zend_Pdf wird hier ausführlich erläutert. An dieser Stelle will ich nur den Prozess als ganzes beleuchten. Also…Ich habe die view Methode eines Controllers so eingerichtet dass nicht mehr HTML ausgeben wird, sondern ein dynamisch beschriebenes PDF. Was neben der Einbindung des Zend Frameworks noch interessant ist sind die Media Views, die Ihre Entsprechung in der send_file Methode von Ruby On Rails finden.

In diesem Zusammenhang:

  1. Downloads mit CakePHP Über die Vorteile und Funktion der Media Views von CakePHP...
  2. CakePHP – Eigene Views mit dem Scaffolder erstellen CakePHP bietet nach Handbuch die Möglichkeit die durch den Scaffolder...
  3. CakePHP – Pagination bei einer HABTM Beziehung Das Handbuch ist nicht allzu Gesprächig was dieses Thema angeht....

CakePHP, php, Zend Framework , ,

  1. basti
    February 23rd, 2011 at 13:09 | #1

    Vielen Dank für’S Tutorial,da es ja einzigartig hier im web ist
    Ich bekomme jedoch eine fehlermeldung und weiß nicht was ich falsch gemacht habe
    Notice (8): Undefined offset: 0 [APP\controllers\katalogs_controller.php, line 90]
    Fatal error: Call to a member function setFont() on a non-object
    in C:\xampplite\htdocs\Anett\Katalog\app\controllers\katalogs_controller.php on line 90

  2. May 23rd, 2011 at 16:36 | #2

    Hallo,

    Cakephp mit Zend_Pdf, das rockt!

    Vielen Dank :)

    Gruß

    Sipatshi

  1. No trackbacks yet.