Diferencia entre revisiones de «Exportar a PDF con cabecera y pie de pagina»

De KumbiaPHP Framework Wiki
Línea 62: Línea 62:
 
class Pdfreports {
 
class Pdfreports {
  
//Declaramos nuestro header y footer como propiedades estaticas
 
 
     private static $header_html = '
 
     private static $header_html = '
 
         <table width="100%">
 
         <table width="100%">
Línea 73: Línea 72:
 
     private static $footer_html = "KumbiaPHP es un framework para aplicaciones web libre escrito en PHP.";
 
     private static $footer_html = "KumbiaPHP es un framework para aplicaciones web libre escrito en PHP.";
  
     public static function export($titulo, $mensaje) {
+
     public static function export($titulo) {
  
 
         // Se crea la instancia de la Clase y directorio temporal
 
         // Se crea la instancia de la Clase y directorio temporal
Línea 85: Línea 84:
 
         //contenido de la vista alojada en el partials
 
         //contenido de la vista alojada en el partials
 
         ob_start();
 
         ob_start();
         View::partial('reports/test/pdf', false, array('titulo' => $titulo, 'mensaje' => $mensaje));
+
         View::partial('reports/test/pdf', false, array('titulo' => $titulo));
 
         // Obtiene en $html el contenido del búfer actual y elimina el búfer de salida actual
 
         // Obtiene en $html el contenido del búfer actual y elimina el búfer de salida actual
 
         $html = ob_get_clean();
 
         $html = ob_get_clean();

Revisión del 19:08 14 ago 2018

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);
    }

}

La Vista

Ahora crearemos nuestra vista, que tendrá la estructura de nuestro PDF, creamos el archivo en default/app/views/_shared/partials/reports/test/pdf.phtml

<html lang="es">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>PDF de Prueba</title>
        <!-- Hacemos referencia a boostrap para dar algunos estilos a nuestro diseño-->
        <link href="<?php echo PUBLIC_APP ?>css/bootstrap/bootstrap.min.css" rel="stylesheet">
    </head>
    <body>
        <div class="text-center">
            <!-- Mostramos nuestro titulo a través de la variable $titulo-->
            <h3><?php echo $titulo ?></h3>
        </div>
        <br><br><br>
        <div class="container-fluid text-justify">
            <!-- Agregamos gran cantidad de texto para ver la repetición del encabezado y pie de pagina.-->
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sapien velit, aliquet eget.... 
        </div> 
    </body>
</html>

Modelo

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 {

    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) {

        // 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));
        // 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);
    }

}