Exportar a PDF con cabecera y pie de pagina
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.
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);
}
}