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