Lenguaje PHP

Generate PDF file from PHP MySQL: Ejemplo completo

Generar archivo PDF a partir de MySQL usando PHP

Generate PDF file from PHP. En este tutorial vamos a usar en lenguaje PHP para exportar y/o crear un archivo PDF. Sin embargo, el contenido del PDF lo extraeremos del gestor de base de datos MySQL y poblar un archivo PDF usando PHP.

Para lograr nuestro objetivo utilizaremos la biblioteca PHP FPDF. Por lo tanto, es una clase PHP muy impresionante para generar PDF usando PHP desde la base de datos MySQL. Esta es la biblioteca php de código abierto para generar un archivo pdf usando PHP.

PDF es un formato de archivo muy común y popular para leer, ver y escribir documentos. El formato PDF es independiente del software de aplicación.

¿Qué es FPDF y Generate PDF file?

FPDF es una clase muy interactiva para la generación dinámica de documentos PDF usando PHP.

FPDF tiene las siguientes características principales

  • Elección de unidad de medida, formato de página y márgenes.
  • Administración de encabezados, numeración y pie de página.
  • Salto automático de página y línea con justificación de texto
  • Compatibilidad con imágenes (JPEG, PNG y GIF).
  • Colores de celdas y más.
  • Enlaces e hipervínculos
  • Compatibilidad con TrueType, Type1 y codificación
  • Compresión de páginas
  • Compatibilidad con gestores de bases de datos.
Generar archivo PDF a partir de MySQL usando PHP
Generar archivo PDF a partir de MySQL usando PHP

Generate PDF file: Pasos principales

  • Descargue la biblioteca FPDF de fpdf.org (http://www.fpdf.org/)
  • Obtendremos datos de la base de datos MySQL en la página.
  • Usaremos la función FPDF libs para generar archivos pdf con encabezado y pie de página.

Primer paso: Crearemos la tabla de personal en la base de datos MySQL.

Generaremos algunos datos de muestra e insertaremos en la tabla de personal.

CREATE TABLE `personal` (
`idp` int(11) NOT NULL COMMENT 'primary key',
`personal_nombre` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'personal nombre',
`personal_edad` int(11) NOT NULL COMMENT 'personal edad',
`personal_salario` double NOT NULL COMMENT 'personal salario',
`fecha` date NOT NULL DEFAULT '2020-12-14'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='tabla personal';

INSERT INTO `personal` (`idp`, `personal_nombre`, `personal_edad`, `personal_salario`, `fecha`) VALUES
(1, 'Tiger Nixon', 61, 320800, '2020-12-14'),
(2, 'Garrett Winters', 63, 170750, '2020-12-14'),
(3, 'Ashton Cox', 66, 86000, '2020-12-14'),
(4, 'Cedric Kelly', 22, 433060, '2020-12-14'),
(5, 'Airi Satou', 33, 162700, '2020-12-14'),
(6, 'Brielle Williamson', 61, 372000, '2020-12-14'),
(7, 'Herrod Chandler', 59, 137500, '2020-12-14'),
(8, 'Rhona Davidson', 55, 327900, '2020-12-14'),
(9, 'Colleen Hurst', 39, 205500, '2020-12-14'),
(10, 'Sonya Frost', 23, 103600, '2020-12-14'),
(11, 'Jena Gaines', 30, 90560, '2020-12-14'),
(12, 'Quinn Flynn', 22, 342000, '2020-12-14'),
(13, 'Charde Marshall', 36, 470600, '2020-12-14'),
(14, 'Haley Kennedy', 43, 313500, '2020-12-14'),
(15, 'Tatyana Fitzpatrick', 19, 385750, '2020-12-14'),
(16, 'Michael Silva', 66, 198500, '2020-12-14'),
(17, 'Paul Byrd', 64, 725000, '2020-12-14'),
(18, 'Gloria Little', 59, 237500, '2020-12-14'),
(19, 'Bradley Greer', 41, 132000, '2020-12-14'),
(20, 'Dai Rios', 35, 217500, '2020-12-14'),
(21, 'Jenette Caldwell', 30, 345000, '2020-12-14'),
(22, 'Yuri Berry', 40, 675000, '2020-12-14'),
(23, 'Caesar Vance', 21, 106450, '2020-12-14'),
(24, 'Doris Wilder', 23, 85600, '2020-12-14'),
(25, 'Angelica Ramos', 47, 1200000, '2020-12-14'),
(26, 'Gavin Joyce', 42, 92575, '2020-12-14'),
(27, 'Jennifer Chang', 28, 357650, '2020-12-14'),
(28, 'Brenden Wagner', 28, 206850, '2020-12-14'),
(29, 'Fiona Green', 48, 850000, '2020-12-14'),
(30, 'Shou Itou', 20, 163000, '2020-12-14'),
(31, 'Michelle House', 37, 95400, '2020-12-14'),
(32, 'Suki Burks', 53, 114500, '2020-12-14'),
(33, 'Prescott Bartlett', 27, 145000, '2020-12-14'),
(34, 'Gavin Cortez', 22, 235500, '2020-12-14'),
(35, 'Martena Mccray', 46, 324050, '2020-12-14'),
(36, 'Unity Butler', 47, 85675, '2020-12-14'),
(37, 'Howard Hatfield', 51, 164500, '2020-12-14'),
(38, 'Hope Fuentes', 41, 109850, '2020-12-14'),
(39, 'Vivian Harrell', 62, 452500, '2020-12-14'),
(40, 'Timothy Mooney', 37, 136200, '2020-12-14'),
(41, 'Jackson Bradshaw', 65, 645750, '2020-12-14'),
(42, 'Olivia Liang', 64, 234500, '2020-12-14'),
(43, 'Bruno Nash', 38, 163500, '2020-12-14'),
(44, 'Sakura Yamamoto', 37, 139575, '2020-12-14'),
(45, 'Thor Walton', 61, 98540, '2020-12-14'),
(46, 'Finn Camacho', 47, 87500, '2020-12-14'),
(47, 'Serge Baldwin', 64, 138575, '2020-12-14'),
(48, 'Zenaida Frank', 63, 125250, '2020-12-14'),
(49, 'Zorita Serrano', 56, 115000, '2020-12-14'),
(50, 'Jennifer Acosta', 43, 75650, '2020-12-14'),
(51, 'Cara Stevens', 46, 145600, '2020-12-14'),
(52, 'Hermione Butler', 47, 356250, '2020-12-14'),
(53, 'Lael Greer', 21, 103500, '2020-12-14'),
(54, 'Jonas Alexander', 30, 86500, '2020-12-14'),
(55, 'Shad Decker', 51, 183000, '2020-12-14'),
(56, 'Michael Bruce', 29, 183000, '2020-12-14'),
(57, 'Donna Snider', 27, 112000, '2020-12-14');

ALTER TABLE `personal`
ADD PRIMARY KEY (`idp`);

ALTER TABLE `personal`
MODIFY `idp` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key', AUTO_INCREMENT=64;


Segundo paso: Conexión con la base de datos MySQL con PHP.

Crearemos un fichero llamado conexión.php y agregaremos el código siguiente que nos permitirá entablar una comunicación fluida con MySQL.
Este archivo se utiliza para conectar y seleccionar la base de datos MySQL usando PHP. Debe cambiar $dbhost, $username, $password y $dbname valor de la variable con las credenciales de la base de datos.

<?php
Class dbConexion{
/* Variables de conexion */
var $dbhost = "localhost";
var $username = "root";
var $password = "";
var $dbname = "db_empleados";
var $conn;
//Funcion de conexion MySQL
function getConexion() {
$con = mysqli_connect($this->dbhost, $this->username, $this->password, $this->dbname) or die("Connection failed: " . mysqli_connect_error());

/* Revisamos la conexion */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
} else {
$this->conn = $con;
}
return $this->conn;
}
}
?>

Tercer paso: Crear el archivo crear_pdf.php

Aquí, incluimos la clase para que genere el documento PDF de manera dinámica usando PHP en el navegador.
Incluiremos el archivo de conexión y archivo pdf lib, para la personalización del encabezado y pie de página de los archivos pdf.

<?php
//Incluimos el fichero de conexion
include_once("dbconect.php");
//Incluimos la libreria PDF
include_once('libs/fpdf.php');

class PDF extends FPDF
{
// Funcion encargado de realizar el encabezado
function Header()
{
// Logo
$this->Image('logo.jpg',10,-1,70);
$this->SetFont('Arial','B',13);
// Move to the right
$this->Cell(80);
// Title
$this->Cell(95,10,'Lista de Personal',1,0,'C');
// Line break
$this->Ln(20);
}
// Funcion pie de pagina
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'C');
}
}
$db = new dbConexion();
$connString = $db->getConexion();
$display_heading = array('idp'=>'ID', 'personal_nombre'=> 'Nombre', 'personal_edad'=> 'Edad','personal_salario'=> 'Salario','fecha'=> 'Fecha',);

$result = mysqli_query($connString, "SELECT idp, personal_nombre, personal_edad, personal_salario, fecha FROM personal") or die("database error:". mysqli_error($connString));
$header = mysqli_query($connString, "SHOW columns FROM personal");

$pdf = new PDF();
//header
$pdf->AddPage();
//foter page
$pdf->AliasNbPages();
$pdf->SetFont('Arial','B',12);
// Declaramos el ancho de las columnas
$w = array(15, 80, 20, 30,30);
//Declaramos el encabezado de la tabla
$pdf->Cell(15,12,'ID',1);
$pdf->Cell(80,12,'NOMBRE',1);
$pdf->Cell(20,12,'EDAD',1);
$pdf->Cell(30,12,'SALARIO',1);
$pdf->Cell(30,12,'FECHA',1);
$pdf->Ln();
$pdf->SetFont('Arial','',12);
//Mostramos el contenido de la tabla
foreach($result as $row)
{
$pdf->Cell($w[0],6,$row['idp'],1);
$pdf->Cell($w[1],6,$row['personal_nombre'],1);
$pdf->Cell($w[2],6,$row['personal_edad'],1);
$pdf->Cell($w[3],6,number_format($row['personal_salario']),1);
$pdf->Cell($w[3],6,$row['fecha'],1);
$pdf->Ln();
}
$pdf->Output();
?>

Cuarto paso: Creación de un archivo index.php

Hemos añadido la etiqueta de formulario HTML y definimos el valor de acción crear_pdf.php archivo.
Además, hemos llamado la información de la tabla para visualizar el contenido, luego haciendo uso de un formulario con método POST crearemos nuestro documento PDF de manera dinámica.

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Generar archivo PDF a partir de MySQL usando PHP</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet">
<?php
//Incluimos el fichero de conexion
include_once("dbconect.php");
?>
</head>
<body>
<div class="container" style="padding-top:50px">
<h2>Generar archivo PDF a partir de MySQL usando PHP</h2>
<form class="form-inline" method="post" action="crear_pdf.php">
<button type="submit" id="pdf" name="generate_pdf" class="btn btn-primary"><i class="fa fa-pdf" aria-hidden="true"></i>
Exportar PDF</button>
</form>
</fieldset>
<hr>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">#</th>
<th scope="col">Nombre</th>
<th scope="col">Edad</th>
<th scope="col">Salario</th>
<th scope="col">Fecha</th>
</tr>
</thead>
<tbody>

<?php
$db = new dbConexion();
$connString = $db->getConexion();

$result = mysqli_query($connString, "SELECT idp, personal_nombre, personal_edad, personal_salario, fecha FROM personal") or die("database error:". mysqli_error($connString));
foreach($result as $row)
{
echo '<tr>
<th scope="row">'.$row['idp'].'</th>
<td>'.$row['personal_nombre'].'</td>
<td>'.$row['personal_edad'].'</td>
<td>'.number_format($row['personal_salario']).'</td>
<td>'.$row['fecha'].'</td>
</tr>';
}
?>
</tbody>
</table>
</div>
</body>
</html>

Conclusión:

Recordemos que el PDF es muy usado en el mundo de los sistemas web para emitir facturas, boletas y /o cualquier otro documento que es enviado vía correo electrónico.

Hemos generado el archivo pdf usando php y base de datos MySQL, Usted puede generar pdf usando otra base de datos también. Sólo tiene que crear una conexión con otra base de datos de tipos.

Se podría crear documentos PDF para cada registro de la base de datos y eso lo veremos en un próximo tutorial.

Puede descargar el código fuente y ver Demostración en vivo desde los siguientes vínculos.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

4 comentarios

  1. Amigo Muy Buenas Tardes, El Precio es en Dolares?.
    Ofreces el soporte completo para Instalarlo y dejarlo Funcionando?
    Para Fines Comerciales estaria Licenciado?

    Muchas Gracias.

  2. Mi hijo esta usando este código y no logra la conexión con la base de datos, pese a que esta esta activa y corriendo otros procesos.
    Me gustaría acceder a los comentarios de esta pagina para saber si alguien ha tenido el mismo problema

    1. en el archivo crear_pdf.php y index.php tine que cambiarse en include_once(«dbconect.php»); por include_once(«conexion.php»); o como sea que se llame tu archivo donde de la conexión

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba