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

De KumbiaPHP Framework Wiki
Línea 6: Línea 6:
 
<source lang="php">
 
<source lang="php">
 
$ composer require mpdf/mpdf
 
$ composer require mpdf/mpdf
 +
</source>
 +
 +
 +
== 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.'''
 +
<source lang="php">
 +
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);
 +
    }
 +
 +
}
 
</source>
 
</source>
  
Línea 19: Línea 36:
 
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 29: Línea 47:
 
     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($nombre, $mensaje) {
+
     public static function export($titulo, $mensaje) {
  
 
         // Se crea la instancia de la Clase y directorio temporal
 
         // Se crea la instancia de la Clase y directorio temporal
Línea 41: Línea 59:
 
         //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('nombre' => $nombre, 'mensaje' => $mensaje));
+
         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
 
         // 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 18:43 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);
    }

}

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

}