Exportar a PDF con cabecera y pie de pagina

De KumbiaPHP Framework Wiki
Saltar a: navegación, buscar

Esta es una contribución inspirada en el excelente tutorial de Henrystivens, que puedes encontrar Aquí.
Quiero complementar agregando un encabezado y un pie de página que se repetirá cada vez que se generen más de una página en el documento.
Sin más preámbulo comencemos.
Lo primero que haremos es cargar la librería MPDF a través de composer.

$ composer require mpdf/mpdf


Nuestro Controlador

Aquí crearemos una nueva vista, la cual será llamada cada vez que deseamos exportar nuestro documento, yo recibiré el mensaje a mostrar a través de la variable $mensaje.

class TestController extends AppController {
 
    public function export($mensaje) {
//No mostramos template, como tampoco vista.
        View::select(null, null);
//llamamos al metodo estatico export de nuestro modelo Pdfreports pasando un titulo y un mensaje
        Pdfreports::export('Kumbieros',$mensaje);
    }
 
}

Ahora crearemos nuestro modelo pdfreports.php en default/app/models.
Hacemos referencia a nuestro autoload.php de la siguiente forma en nuestro modelo

require_once ROOT_PATH . 'vendor/autoload.php';
 
use Mpdf\Mpdf;
 
class Pdfreports {
 
//Declaramos nuestro header y footer como propiedades estaticas
    private static $header_html = '
        <table width="100%">
        <tr>
            <td width="50%" align="left"><img src="http://wiki.kumbiaphp.com/images/wikibanner.png"></td>
            <td width="50%" align="right">Tutorial Encabezados y pie de Pagína</td>
        </tr>
</table><hr>
    ';
    private static $footer_html = "KumbiaPHP es un framework para aplicaciones web libre escrito en PHP.";
 
    public static function export($titulo, $mensaje) {
 
        // Se crea la instancia de la Clase y directorio temporal
        $mpdf = new Mpdf(['tempDir' => APP_PATH . '/temp']);
 
        //Establezco setAutMargin en stretch para establecer una distancia minima que se expande conforme al alto del encabezado 
        $mpdf->setAutoTopMargin = 'stretch';
        //establezco el HTML al header
        $mpdf->SetHTMLHeader(self::$header_html);
 
        //contenido de la vista alojada en el partials
        ob_start();
        View::partial('reports/test/pdf', false, array('titulo' => $titulo, 'mensaje' => $mensaje));
        // Obtiene en $html el contenido del búfer actual y elimina el búfer de salida actual
        $html = ob_get_clean();
 
        //agrego el footer de pagina y esta
        $mpdf->setAutoBottomMargin = 'stretch';
        $mpdf->SetHTMLFooter(self::$footer_html);
 
        // Agrego el contenido del Partials al HTML
        $mpdf->WriteHTML($html);
 
        // Envia un archivo PDF al navegador
        $mpdf->Output('mipdf.pdf', \Mpdf\Output\Destination::DOWNLOAD);
    }
 
}