Como generar reportes en PDF con PHP y Dompdf

Como generar reportes en PDF con PHP y Dompdf

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

  }

Deja que llegue a más gente

Facebook
Twitter
Pinterest
LinkedIn

9 cursos al precio de 1

Aprovecha nuestro Pack Full Stack con 9 cursos premium al precio más bajo del año.

$99 MXN

$2,000 MXN

Considera suscribirte para más

Flecha apuntando

Deja un comentario

Tu dirección de correo electrónico no será publicada.

¿Ya nos sigues?

Más Populares

Recibe Todo en Tu Inbox

Suscríbete a nuestro boletín

Sin spam, solo notificaciones de nuevos cursos y contenido de la Academia.

Destacados para ti

Relacionados

Selecciona tu moneda
MXN
USD