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

De KumbiaPHP Framework Wiki
 
(No se muestran 37 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
Esta es una contribución inspirada en el excelente tutorial de Henrystivens, que puedes encontrar aquí.
+
Esta es una contribución inspirada en el excelente tutorial de Henrystivens, que puedes encontrar aquí: [https://www.kumbiaphp.com/blog/2018/08/06/crear-pdf-usando-html/ Crear PDF usando HTML].
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.
 
  
<source lang="cmd">
+
Quiero complementar  agregando un encabezado y un pie de página que se repetirá cada vez. Sin más preámbulo comencemos.
 +
 
 +
== Instalar mPDF ==
 +
 
 +
Lo primero que haremos es instalar la librería MPDF a través de composer.<br>
 +
 
 +
<source lang="php">
 
$ composer require mpdf/mpdf
 
$ composer require mpdf/mpdf
 
</source>
 
</source>
 +
 +
 +
== Nuestro Controlador ==
 +
 +
Aquí crearemos una nueva vista, la cual será llamada cada vez que deseamos exportar nuestro documento.
 +
<source lang="php">
 +
class TestController extends AppController {
 +
 +
    public function export() {
 +
        //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('Hola Kumbieros!');
 +
    }
 +
 +
}
 +
</source>
 +
 +
== Las Vistas ==
 +
 +
Ahora crearemos nuestras vistas parciales(partials), que tendrán la estructura de nuestro PDF, creamos el archivo en '''default/app/views/_shared/partials/reports/test/pdf.phtml'''
 +
<source lang="html5">
 +
<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>
 +
</source>
 +
 +
Del mismo modo creamos el partial para el encabezado y pie de pagina
 +
'''default/app/views/_shared/partials/reports/test/header.phtml'''
 +
<source lang="html5">
 +
<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>
 +
</source>
 +
 +
'''default/app/views/_shared/partials/reports/test/footer.phtml'''
 +
<source lang="html5">
 +
    <div>KumbiaPHP es un framework para aplicaciones web libre escrito en PHP.</div>
 +
</source>
 +
 +
== Modelo ==
 +
 +
Ahora crearemos nuestro modelo pdf_reports.php en '''default/app/models.'''<br>
 +
 +
<source lang="php">
 +
 +
use Mpdf\Mpdf;
 +
 +
class PdfReports {
 +
 +
    public static function getHeaderHtml() {
 +
        //contenido del header alojada en el partials
 +
        ob_start();
 +
        View::partial('reports/test/header');
 +
        // Obtiene el html del búfer actual y elimina el búfer de salida actual
 +
        return ob_get_clean();
 +
    }
 +
 +
    public static function getFooterHtml() {
 +
        //contenido del footer alojada en el partials
 +
        ob_start();
 +
        View::partial('reports/test/footer');
 +
        // Obtiene el html del búfer actual y elimina el búfer de salida actual
 +
        return ob_get_clean();
 +
    }
 +
 +
    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::getHeaderHtml());
 +
 +
        //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::getFooterHtml());
 +
 +
        // Agrego el contenido del Partials al HTML
 +
        $mpdf->WriteHTML($html);
 +
 +
        // Envia un archivo PDF al navegador
 +
        $mpdf->Output('mipdf.pdf', \Mpdf\Output\Destination::DOWNLOAD);
 +
    }
 +
 +
}
 +
</source>
 +
 +
== Resultado ==
 +
 +
Ahora abrimos nuestro navegador  ingresando a nuestra url '''http://localhost/tuweb/test/export'''
 +
Y se descargara nuestro PDF, el cual repite su encabezado y pie de página por cada hoja.
 +
 +
[[Archivo:Exportar-pdf1.jpg]]
 +
 +
[[Archivo:Exportar-pdf2.jpg]]
 +
 +
El segundo artículo sobre mPDF en el blog [https://kumbiaphp.com/blog/2019/04/29/exportar-tabla-html-a-pdf/ Exportar tabla HTML a PDF] ya usa estos templates.
 +
 +
--[[Usuario:Ekogro|Ekogro]]  19:24 14 ago 2018 (UTC)
 +
[[Categoría:Tutoriales KumbiaPHP]]

Revisión actual del 16:09 3 jun 2020

Esta es una contribución inspirada en el excelente tutorial de Henrystivens, que puedes encontrar aquí: Crear PDF usando HTML.

Quiero complementar agregando un encabezado y un pie de página que se repetirá cada vez. Sin más preámbulo comencemos.

Instalar mPDF[editar]

Lo primero que haremos es instalar la librería MPDF a través de composer.

$ composer require mpdf/mpdf


Nuestro Controlador[editar]

Aquí crearemos una nueva vista, la cual será llamada cada vez que deseamos exportar nuestro documento.

class TestController extends AppController {

    public function export() {
        //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('Hola Kumbieros!');
    }

}

Las Vistas[editar]

Ahora crearemos nuestras vistas parciales(partials), que tendrán 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>

Del mismo modo creamos el partial para el encabezado y pie de pagina default/app/views/_shared/partials/reports/test/header.phtml

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

default/app/views/_shared/partials/reports/test/footer.phtml

     <div>KumbiaPHP es un framework para aplicaciones web libre escrito en PHP.</div>

Modelo[editar]

Ahora crearemos nuestro modelo pdf_reports.php en default/app/models.

use Mpdf\Mpdf;

class PdfReports {

    public static function getHeaderHtml() {
        //contenido del header alojada en el partials
        ob_start();
        View::partial('reports/test/header');
        // Obtiene el html del búfer actual y elimina el búfer de salida actual
        return ob_get_clean();
    }

    public static function getFooterHtml() {
        //contenido del footer alojada en el partials
        ob_start();
        View::partial('reports/test/footer');
        // Obtiene el html del búfer actual y elimina el búfer de salida actual
        return ob_get_clean();
    }

    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::getHeaderHtml());

        //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::getFooterHtml());

        // Agrego el contenido del Partials al HTML
        $mpdf->WriteHTML($html);

        // Envia un archivo PDF al navegador
        $mpdf->Output('mipdf.pdf', \Mpdf\Output\Destination::DOWNLOAD);
    }

}

Resultado[editar]

Ahora abrimos nuestro navegador ingresando a nuestra url http://localhost/tuweb/test/export Y se descargara nuestro PDF, el cual repite su encabezado y pie de página por cada hoja.

Exportar-pdf1.jpg

Exportar-pdf2.jpg

El segundo artículo sobre mPDF en el blog Exportar tabla HTML a PDF ya usa estos templates.

--Ekogro 19:24 14 ago 2018 (UTC)