Diferencia entre revisiones de «Exportar a PDF con cabecera y pie de pagina»
(No se muestran 34 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 | + | |
− | Sin más preámbulo comencemos. | + | Quiero complementar agregando un encabezado y un pie de página que se repetirá cada vez. Sin más preámbulo comencemos. |
− | Lo primero que haremos es | + | |
+ | == Instalar mPDF == | ||
+ | |||
+ | Lo primero que haremos es instalar la librería MPDF a través de composer.<br> | ||
<source lang="php"> | <source lang="php"> | ||
Línea 8: | Línea 11: | ||
</source> | </source> | ||
− | |||
− | |||
+ | == Nuestro Controlador == | ||
+ | |||
+ | Aquí crearemos una nueva vista, la cual será llamada cada vez que deseamos exportar nuestro documento. | ||
<source lang="php"> | <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; | use Mpdf\Mpdf; | ||
− | class | + | 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 | + | 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 | ||
$mpdf = new Mpdf(['tempDir' => APP_PATH . '/temp']); | $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'; | $mpdf->setAutoTopMargin = 'stretch'; | ||
− | $mpdf->SetHTMLHeader(self:: | + | //establezco el HTML al header |
+ | $mpdf->SetHTMLHeader(self::getHeaderHtml()); | ||
//contenido de la vista alojada en el partials | //contenido de la vista alojada en el partials | ||
ob_start(); | ob_start(); | ||
− | View::partial('reports/pdf'); | + | 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(); | ||
− | //agrego el footer de pagina | + | //agrego el footer de pagina y esta |
$mpdf->setAutoBottomMargin = 'stretch'; | $mpdf->setAutoBottomMargin = 'stretch'; | ||
− | $mpdf->SetHTMLFooter(self:: | + | $mpdf->SetHTMLFooter(self::getFooterHtml()); |
− | // | + | |
+ | // Agrego el contenido del Partials al HTML | ||
$mpdf->WriteHTML($html); | $mpdf->WriteHTML($html); | ||
− | + | // Envia un archivo PDF al navegador | |
− | // Envia un archivo PDF | ||
$mpdf->Output('mipdf.pdf', \Mpdf\Output\Destination::DOWNLOAD); | $mpdf->Output('mipdf.pdf', \Mpdf\Output\Destination::DOWNLOAD); | ||
} | } | ||
Línea 50: | Línea 124: | ||
} | } | ||
</source> | </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.
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)