Revisión actual |
Tu texto |
Línea 1: |
Línea 1: |
− | 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]. | + | 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. |
− | Quiero complementar agregando un encabezado y un pie de página que se repetirá cada vez. Sin más preámbulo comencemos. | + | Sin más preámbulo comencemos. |
− | | + | Lo primero que haremos es cargar la librería MPDF a través de composer. |
− | == 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
| |
− | </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]]
| |