Crear archivos en PDF con PHP MySQLi
¿Cómo visualizar y descargar un PDF usando PHP & MySQL?
Crear archivos en PDF con PHP MySQLi. En este artículo vamos a aprender a crear ficheros PDF con PHP y MySQLi utilizando la librería de PHP dompdf.
Ahora, lo que haremos es explicar cómo crear documentos PDF con esta librería dinámica. Para generar un documento PDF desde PHP lo podemos hacer utilizando diversas formas. Sin embargo, lo podemos realizar con las librerás HTML2PDF, FPDF y/o DOMPDF.
Crear archivos en PDF con PHP MySQLi
Los recursos que usaremos son:
- Uso de PHP
- Instalación de librerías externas
- Utilizar e instalar DOMPDF
- Generar ficheros PDFs con nombre personalizado en una variable.
- Inserción de etiquetas HTML (Tablas).
- Reportes en PDF desde PHP y MySQLi
Componentes del sistema
Base de datos
Debemos de crear una base de datos e importar la siguiente consulta SQL. Para este ejemplo la tabla se llamará «transacciones». Sin embargo, puedes cambiar tanto el nombre de la tabla como sus columnas.
Además, en el script también debes de cambiar.
CREATE TABLE `transacciones` ( `id` int(11) NOT NULL, `transaccion_cod` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, `nombres` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL, `tipo_pago` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, `estado_transaccion` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, `email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; INSERT INTO `transacciones` (`id`, `transaccion_cod`, `nombres`, `tipo_pago`, `estado_transaccion`, `email`) VALUES (1, '10001', 'Jose Flores', 'Tarjeta', 'Activo', 'jose@gmail.com'); ALTER TABLE `transacciones` ADD PRIMARY KEY (`id`); ALTER TABLE `transacciones` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
db.php
Encargada de realizar la conexión con la base de datos
<?php // Configuración necesaria para acceder a la data base. $hostname = "localhost"; $usuariodb = "root"; $passworddb = "root"; $dbname = "php_exportapdf"; // Generando la conexión con el servidor $conectar = mysqli_connect($hostname, $usuariodb, $passworddb, $dbname); ?>
index.php
La portada principal donde está la información de la base de datos que será exportada en un fichero PDF.
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <link rel="icon" href="favicon.ico"> <title>Generar Archivo PDF con PHP - BaulPHP.com</title> <!-- Bootstrap core CSS --> <link href="dist/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom styles for this template --> <link href="assets/css/sticky-footer-navbar.css" rel="stylesheet"> </head> <body> <header> <!-- Fixed navbar --> <nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark"> <a class="navbar-brand" href="#">BaulPHP</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarCollapse"> <ul class="navbar-nav mr-auto"> <li class="nav-item active"> <a class="nav-link" href="index.php">Inicio <span class="sr-only">(current)</span></a> </li> </ul> <form class="form-inline mt-2 mt-md-0"> <input class="form-control mr-sm-2" type="text" placeholder="Buscar" aria-label="Search"> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Busqueda</button> </form> </div> </nav> </header> <!-- Inicio content --> <div class="container"> <h1 class="mt-5">Generar Archivo PDF con PHP</h1> <hr> <div class="btn btn-primary"><a href="GenerarPDF.php" style="color:#FFF; text-decoration:none; " target="_blank">Visualizar en PDF</a></div> <div class="btn btn-primary"><a href="DescargarPDF.php" style="color:#FFF; text-decoration:none; " target="_blank">Descargar PDF</a></div> <hr> <div class="row"> <div class="col"> <?php include_once("db.php"); echo '<table class="table"'; echo '<thead>'; echo '<tr>'; echo '<th scope="col">ID</th>'; echo '<th scope="col">COD Transaccion</th>'; echo '<th scope="col">Nombres</th>'; echo '<th scope="col">Tipo de Pago</th>'; echo '<th scope="col">Estado Transaccion</th>'; echo '<th scope="col">E-mail</th>'; echo '</tr>'; echo '</thead>'; echo '<tbody>'; $resultado_transacciones = "SELECT * FROM transacciones"; $resultado_transacciones = mysqli_query($conectar, $resultado_transacciones); while($transacciones = mysqli_fetch_assoc($resultado_transacciones)){ echo '<tr><td>'.$transacciones['id'] . "</td>"; echo '<td>'.$transacciones['transaccion_cod'] . "</td>"; echo '<td>'.$transacciones['nombres'] . "</td>"; echo '<td>'.$transacciones['tipo_pago'] . "</td>"; echo '<td>'.$transacciones['estado_transaccion'] . "</td>"; echo '<td>'.$transacciones['email'] . "</td></tr>"; } echo '</tbody>'; echo '</table>'; ?> </div> </div><!-- Fin row --> </div><!-- Fin container --> <!-- Inicio Footer --> <footer class="footer"> <div class="container"> <span class="text-muted"><p>Códigos <a href="https://www.baulphp.com/" target="_blank">BaulPHP</a></p></span> </div> </footer> <!-- Bootstrap core JavaScript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script>window.jQuery || document.write('<script src="assets/js/vendor/jquery-slim.min.js"><\/script>')</script> <script src="assets/js/vendor/popper.min.js"></script> <script src="dist/js/bootstrap.min.js"></script> </body> </html>
Fichero DescargarPDF.php
Sera el archivo encargado de procesar la información y convertirlo en formato PDF usando la librería DOMPDF.
include_once("db.php"); $mihtml = '<table border=1'; $mihtml .= '<thead>'; $mihtml .= '<tr>'; $mihtml .= '<th>ID</th>'; $mihtml .= '<th>COD Transaccion</th>'; $mihtml .= '<th>Nombres</th>'; $mihtml .= '<th>Tipo de Pago</th>'; $mihtml .= '<th>Estado Transaccion</th>'; $mihtml .= '<th>E-mail</th>'; $mihtml .= '</tr>'; $mihtml .= '</thead>'; $mihtml .= '<tbody>'; $resultado_transacciones = "SELECT * FROM transacciones"; $resultado_transacciones = mysqli_query($conectar, $resultado_transacciones); while($transacciones = mysqli_fetch_assoc($resultado_transacciones)){ $mihtml .= '<tr><td>'.$transacciones['id'] . "</td>"; $mihtml .= '<td>'.$transacciones['transaccion_cod'] . "</td>"; $mihtml .= '<td>'.$transacciones['nombres'] . "</td>"; $mihtml .= '<td>'.$transacciones['tipo_pago'] . "</td>"; $mihtml .= '<td>'.$transacciones['estado_transaccion'] . "</td>"; $mihtml .= '<td>'.$transacciones['email'] . "</td></tr>"; } $mihtml .= '</tbody>'; $mihtml .= '</table';
Código para forzar la descarga desde el navegador
$dompdf->stream( "Lista_Transacciones", array( "Attachment" => true //Para realizar la descarga )
CONCLUSIÓN
La creación de sistemas web hoy en día está creciendo rápidamente y sus desarroladores tambien. Sin embargo, su uso se ve incrementando en las empresas que implementan estos sistemas por su facilidad de uso.
Es por tal motivo que BAULPHP está apoyando con un granito de arena para exportar la información de la base de datos en un archivo formato PDF. Para dar dinamismo al sistema web.
Nota:
No se olviden de actualizar la librería para que funcione correctamente y lo pueden hacer descargando el DOMPDF del siguiente link
Hemos actualizado el script conjuntamente con la librería DOMPDF para que no genere errores
Hola a todos,
Hemos actualizado el script y además hemos actualizado la librería para visualizar y generar descargas de documentos PDF usando como base MYSQL. Por otro lado, tambien hemos incluido la tabla para el ejemplo.
Saludos cordiales
hola estimado tmuy buen blog de php. directo a programar y generar códigos interesantes.
en estos momentos estoy buscando generadores de codigophp para formularios
Hola compañero. En los ficheros de descarga no está la base de datos. Podrías facilitarla?
Muy buenos los aportes! gracias!