PDFs mit dompdf und Codeigniter

Ich war etwas auf der Suche ehe ich mich für dompdf entschieden habe. Warum? Es scheint am häufigsten benutzt zu werden und sollte somit noch ne Weile aktuell bleiben. Ich werde es ja sehen.

Außerdem ist es sehr sehr einfach. Man kann mit dompdf schlicht ein html-Dokument übergeben und dompdf macht daraus ein PDF, welches abgelegt wird oder direkt heruntergeladen werden kann.

Nun verwende ich für mein aktuelles Projekt Codeigniter. Ich war auf der Suche, wie man das nun bequem integrieren kann und habe nach etwas probieren mich für einen sehr simplen weg entschieden. Man könnte dompdf sicher in eine Library packen oder vielleicht als Driver bezeichnen und entsprechend verwenden, es gibt aber auch den Folder third_party und der hats mit angetan 🙂

Download dompdf

Das ganze gibt es hier (https://github.com/dompdf/dompdf) und kommt in den /application/third_party/ Ordner von Codeigniter. Ich habe das Verzeichnis noch von dompdf-master/ auf dompdf/ umbenannt.

Download font-lib-php

Mir warf dompdf beim ersten Versuch einen Fehler:

Warning: require_once(/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php): failed to open stream: No such file or directory in /var/www/dompdf-master/dompdf_config.inc.php on line 335
Fatal error: require_once(): Failed opening required ‚/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php‘ (include_path=‘.:/usr/share/php:/usr/share/pear‘) in /var/www/dompdf-master/dompdf_config.inc.php on line 335

Auslöser ist das fehlende font-lib-php. Also herunterladen (https://github.com/PhenX/php-font-lib). Im Ordner /application/third/party/dompdf/lib/php-font-lib den Ordner classes/ erstellen und den Inhalt von src/FontLib reinkopieren.

Includen

Wie gesagt, ich habe es mir einfach gemacht. Ich include einfach dompdf in der Methode, in der ich es brauche.

class Abrechnung extends CI_Controller {

    public function pdf()
    {
        
        require_once APPPATH.'third_party/dompdf/dompdf_config.inc.php';
        
        $data = '';
        
        $dompdf = new DOMPDF();
        $html = $this->load->view('abrechnung/pdf', $data, TRUE);
        $dompdf->set_paper('a4','portrait');
        $dompdf->load_html($html);
        $dompdf->render();
        $dompdf->stream("name.pdf");

    }
    
}

Das war es im Grunde schon. In diesem Code fülle ich das PDF noch mit einer HTML-Datei. Die Formatierung sieht noch etwas verunglückt aus, aber der Code wird ausgeführt und mein HTML angezeigt. Hübschmachen kommt jetzt 🙂

Beim herumexperimentieren hatte ich den Fehler

Fatal error: Uncaught exception ‘DOMPDF_Exception’ with message ‘An input file is required (i.e. input_file _GET variable).

Das passiert, wenn man anstelle der config-datei dompdf.php includiert. Also besser nicht machen 😉

 

Quellen

https://kyokasuigetsu25.wordpress.com/2011/02/09/how-to-use-dompdf/
http://stackoverflow.com/questions/17999091/how-do-i-get-dompdf-to-display-my-codeigniter-view-correctly
http://stackoverflow.com/questions/15028250/dompdf-fails-to-load

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.