El siguiente código corresponde a la ruta que renderiza nuestra vista y formulario web, no es requerido al 100% si solo necesitan el procesamiento de datos.
// Método para renderizar la vista en tutorialesController.php
function crear_pdf()
{
$data =
[
'title' => 'Crear nuevo reporte'
];
View::render('crear_pdf', $data);
}
El siguiente bloque de código es todo el proceso utilizado en nuestro video, pueden adaptarlo a su implementación, también pueden ver toda la documentación de la librería aquí: https://github.com/dompdf/dompdf
Recuerden que también deberán incluir el archivo de autoload.php de Composer si es que no están utilizando algún framework, esto para que cargue la librería de forma correcta y todas sus clases.
// Método para el procesamiento del PDF
// cargar autoload.php
require_once '.....autoload.php'; // solo si no lo han incluido anteriormente
use Dompdf\Dompdf;
use Dompdf\Option;
use Dompdf\Exception as DomException;
use Dompdf\Options;
function post_crear_pdf()
{
try {
$texto = clean($_POST["texto"]);
$modo = clean($_POST["modo"]);
$download = $modo === 'si' ? true : false;
$contenido = '<!DOCTYPE html>
<html>
<head>
<style>
table {
width: 100%%;
text-align: center;
}
</style>
</head>
<body>
<img src="%s" alt="%s" style="width: 100px;"><br>
<h1>Bienvenido de nuevo a %s</h1>
<p>Versión <b>%s</b></p>
<p>%s</p>
<table>
<thead>
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Email</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>John Doe</td>
<td>jhon@doe.com</td>
<td>$2,532</td>
</tr>
<tr>
<td>2</td>
<td>John Doe</td>
<td>jhon@doe.com</td>
<td>$712</td>
</tr>
<tr>
<td>3</td>
<td>John Doe</td>
<td>jhon@doe.com</td>
<td>$6,250</td>
</tr>
<tr>
<td>4</td>
<td>John Doe</td>
<td>jhon@doe.com</td>
<td>$8,152</td>
</tr>
<tr>
<td>5</td>
<td>John Doe</td>
<td>jhon@doe.com</td>
<td>$596</td>
</tr>
<tr>
<td>6</td>
<td>John Doe</td>
<td>jhon@doe.com</td>
<td>$1,756</td>
</tr>
</tbody>
</table>
</body>
</html>';
$contenido = sprintf($contenido, get_image('bee_logo.png'), get_bee_name(), get_bee_name(), get_bee_version(), $texto);
// Nombre del pdf
$filename = generate_filename().'.pdf';
// Opciones para prevenir errores con carga de imágenes
$options = new Options();
$options->set('isRemoteEnabled', true);
// Instancia de la clase
$dompdf = new Dompdf($options);
// Cargar el contenido HTML
$dompdf->loadHtml($contenido);
// Formato y tamaño del PDF
$dompdf->setPaper('A4', 'portrait');
// Renderizar HTML como PDF
$dompdf->render();
// Salida para descargar
$dompdf->stream($filename, ['Attachment' => $download]);
} catch (Exception $e) {
Flasher::new($e->getMessage(), 'danger');
Redirect::to('home');
} catch (DomException $e) {
Flasher::new($e->getMessage(), 'danger');
Redirect::to('home');
}
}