Realiza tus reportes PDF con conexión a base de datos MariaDB con PHP y la librería FPDF


En artículos anteriores se hizo una pequeña introducción y algunas personalizaciones a nuestros reportes en formato pdf paso a paso desde la descarga, e incorporación de la librería FPDF para generar reportes con el lenguaje de programación PHP, en este artículo te mostraré como realizar la conexión a la base de datos que tengas (El gestor de base de datos que usaré es MariaDB) para generar un reporte de la lista de unos alumnos de forma sencilla.

Lo primero que harás es crear la base de datos dentro de tu gestor, a continuación te dejo el código:

   /*
      Author: Ing. Dick Díaz Delgado
   */

   /* Código SQL para la creación de la Base de Datos */
   CREATE DATABASE tucafejava;


Una vez creada la base de datos puedes continuar con la creación de tu tabla en mi caso la llamaré alumno, a continuación te dejo el código:

   /*
      Author: Ing. Dick Díaz Delgado
   */

   /*Código SQL para la creación de la Tabla */
   CREATE TABLE alumno (
      id_alumno int(11) NOT NULL AUTO_INCREMENT,
      nom_alumno varchar(250) NOT NULL,
      ape_alumno varchar(250) NOT NULL,
      doc_alumno varchar(8) NOT NULL,
      correo varchar(250) NULL,
      telefono varchar(20) NULL,
      PRIMARY KEY (id_alumno)
   );

Ahora lo importante, debes crear un archivo llamado conexion.php el cual tendrá los datos para realizar la conexión a nuestra base de datos y así acceder a las tablas respectivas, como en el siguiente ejemplo:

<?php
/*
Author: Ing. Dick Díaz Delgado
*/

$servidor = "localhost";
$usuario = "root";
$clave = "";
$base_datos = "reporte";
//$puerto = "3306";

$conexion = mysqli_connect($servidor, $usuario, $clave, $base_datos);
?>

Ahora lo que faltaría agregar a nuestro proyecto es el archivo que realizará el reporte, al cual llamaré reporte.php; a continuación te dejo el código:

<?php
/*
Author: Ing. Dick Díaz Delgado
*/
include 'fpdf.php'; // Incluímos la clase fpdf.php para poder utilizar sus métodos para generar nuestro pdf
date_default_timezone_set('America/Lima'); //Configuramos el horario de acuerdo a la ubicación del servidor
include 'conexion.php';
class PDF extends FPDF {
    
    function Header(){
        
        $this->Image('img/logo.png', 12, 12, 25); //Insertamos el logo si es en PNG su calidad o formato debe estar entre PNG 8/PNG 24
        
        $ancho = 190; //
        $this->SetFont('Arial', 'B', 6); //Asignar la fuente, el estilo de la fuente (negrita) y el tamaño de la fuente
        
        if($this->pagina == 1){ //Cuando el archivo está en Horizontal
            
            $horizontal = 85; //Permitirá que las dimensiones que abarca horizontalmente sea 85 puntos más que cuando es vertical
            $this->SetY(12); //Mencionamos que el curso en la posición Y empezará a los 12 puntos para escribir el Usuario:
            $this->Cell($ancho + $horizontal, 10,'Usuario: http://tucafejava.blogspot.com', 0, 0, 'R');
            $this->SetY(15);
            $this->Cell($ancho + $horizontal, 10,'Fecha: '.date('d/m/Y'), 0, 0, 'R');
            $this->SetY(18);
            $this->Cell($ancho + $horizontal, 10,'Hora: '.date('H:i:s'), 0, 0, 'R');
            
        } else {
            
            $this->SetY(12); //Mencionamos que el curso en la posición Y empezará a los 12 puntos para escribir el Usuario:
            $this->Cell($ancho, 10,'Usuario: http://tucafejava.blogspot.com', 0, 0, 'R');
            $this->SetY(15);
            $this->Cell($ancho, 10,'Fecha: '.date('d/m/Y'), 0, 0, 'R');
            $this->SetY(18);
            $this->Cell($ancho, 10,'Hora: '.date('H:i:s'), 0, 0, 'R');
            
        }
        
    }
    
    function Body() {
        
        $yy = 40;
        $y = $this->GetY(); 
        $x = 12;
        $this->AddPage($this->CurOrientation);
        
        $consulta = mysqli_query($this->conexion, " SELECT * FROM alumno ");
        
        $this->SetFont('helvetica', 'B', 18); //Asignar la fuente, el estilo de la fuente (negrita) y el tamaño de la fuente
        $this->SetXY(0, $y + $yy); //Ubicación según coordenadas X, Y. X=0 porque empezará desde el borde izquierdo de la página
        $this->Cell(220, 10, "LISTA DE ALUMNOS", 0, 1, 'C');
        
        
        $this->SetFont('arial', 'B', 8); //Asignar la fuente, el estilo de la fuente (subrayado) y el tamaño de la fuente
        $y = $this->GetY() + 8;
        $this->SetXY(10, $y);
        $this->MultiCell(12, 4, utf8_decode("Nº"), 1, 'C'); //Utilizamos el utf8_decode para evitar código basura o ilegible
        $this->SetXY(22, $y); //El resultado 22 es la suma de la posición 10 y el tamaño del MultiCell de 12.
        $this->MultiCell(73, 4, utf8_decode("Apellidos y Nombres"), 1, 'C');
        $this->SetXY(95, $y);
        $this->MultiCell(40, 4, utf8_decode("Nº DNI"), 1, 'C');
        $this->SetXY(135, $y);
        $this->MultiCell(35, 4, utf8_decode("Correo"), 1, 'C');
        $this->SetXY(170, $y);
        $this->MultiCell(30, 4, utf8_decode("Teléfono"), 1, 'C');
        
        $this->SetFont('arial', '', 8);
        $n = 1;
        while($r = mysqli_fetch_array($consulta)) {
            
            $y = $this->GetY();
            $this->SetXY(10, $y);
            $this->MultiCell(12, 4, $n, 1, 'C');
            $this->SetXY(22, $y);
            $this->MultiCell(73, 4, $r['nom_alumno']." ".$r['ape_alumno'], 1, 'C');
            $this->SetXY(95, $y);
            $this->MultiCell(40, 4, $r['doc_alumno'], 1, 'C');
            $this->SetXY(135, $y);
            $this->MultiCell(35, 4, $r['correo'], 1, 'C');
            $this->SetXY(170, $y);
            $this->MultiCell(30, 4, $r['telefono'], 1, 'C');
            $n++;
            
        }
        
    }
    
    function Footer(){
        
        $this->SetY(-10);
        $this->SetFont('Arial', 'I', 8);
        $this->Cell(0, 10, utf8_decode('Página ').$this->PageNo().'/{nb}', 0, 0, 'C');
        
        if($this->CurOrientation == 'L') { //Se reconoce el tipo de Orientación de la página (Vertical = P|Horizontal = L)
            
            $this->SetX(0);
            $this->Cell(292, 10, utf8_decode('Creado por el '.$this->Author), 0, 0, 'R');
            
        } else {
            
            $this->SetX(0);
            $this->Cell(205, 10, utf8_decode('Creado por el '.$this->Author), 0, 0, 'R');
            
        }
        
    }
    
}

$pdf = new PDF();
$pdf->pagina = 0;
$pdf->conexion = $conexion; //Variable para la conexión a datos
$pdf->AliasNbPages(); //Permitir el conteo de la cantidad de páginas existentes {nb}
$pdf->Body(); //Llamada a la función Body para generar el PDF
$pdf->Output('ReporteBDListaAlumnoEjemplo_TuCafeJava_'.date("d_m_Y_H_i_s"), 'I'); //El primer parámetro es para colocar el nombre del archivo al momento de ser descargado y el segundo parámetro es para abrir el archivo en el navegador con la opción para poder ser descargado

?>

Opté por realizar una reutilización del código de un anterior artículo, para agilizar el proceso:

Espero haya sido de ayuda este artículo para generar tus reportes utilizando datos dinámicos a través de un gestor ya sea de uno de tus proyectos que tengas desarrollado, con esta potente librería y el lenguaje de programación PHP puedes seguir creando cosas innovadoras, no te olvides dejar tu comentario o tal vez una opinión para seguir mejorando nuestro blog, o compartirlo en tus redes sociales. Disculpando la demora de este nuevo artículo y agradecido por anticipado por tu apoyo.

Clic aquí para descargar el código de este artículo. 

Comentarios

  1. Excelente ingeniero, muy útil para hacer reportes en PDF para cualquier tipo de trabajo

    ResponderEliminar
    Respuestas
    1. Gracias, ya sabes que cualquier consulta puedes hacerlo a través de los comentarios o sino el formulario de contacto.

      Saludos,

      Eliminar

Publicar un comentario

Entradas populares de este blog

Personaliza tus reportes PDF desde PHP con la librería FPDF

Practica de Diagrama de Flujo Intermedio - Resueltos

Ejercicios Básicos para aprender a programar en Android Studio [Java y Kotlin]