Hoy le toca el turno a la generación de PDF con vistas a la generación de informes. La idea es obtener los datos que queramos mostrar desde una Base de datos y luego mostrarlos en forma de tabla. Para ello, nos valdremos de una librería PHP llamada ezpdf que nos permitirá generarlos. Hay varias librerías que permitan realizar las tareas de crear PDFs aunque nosotros hemos elegido esta aunque por nada en particular.
Para poder ver el código de ejemplo debmos saber que tenemos una base de datos en nuestra máquina local llamada "sergio" y una tabla llamada usuario. Sabiendo esto ya estamos listos para poder entender el ejemplo.
require_once('./lib/PDF/class.ezpdf.php'); $pdf =& new Cezpdf('a4'); $pdf->selectFont('./lib/PDF/fonts/Courier.afm'); $pdf->ezSetCmMargins(1,1,1.5,1.5);
Para empezar incluimos la librería descargada. Definimos el tamaño del documento(A4), el tipo de fuente y el tamaño de los márgenes exteriores.
$conexion=mysql_connect("localhost","sergio","sergio") or die(mysql_error()); mysql_select_db("proyecto",$conexion) or die(mysql_error());
Realizamos la conexión con la base de datos alojada en nuestra máquina local.
$resEmp= ""; $titles= ""; $txttit=""; $resEmp = mysql_query("SELECT * FROM usuario") or die(mysql_error()); $txttit = "Informe de todos los usuarios\n"; $titles = array( 'id'=>'ID', 'nombre'=>'Nombre', 'apellidos'=>'Apellidos', 'telefono'=>'Teléfono', 'direccion'=>'Dirección', 'CP'=>'Código Postal', 'ciudad'=>'Ciudad', 'provincia'=>'Provincia', 'fecha_nacimiento'=>'Fecha de Nacimiento', 'mail'=>'Email', 'login'=>'Login' );
Realizamos la consulta a la base de datos obteniendo todos los campos de la tabla de usuario. Establecemos el título del documento y generamos un array que contiene tanto el nombre de las columnas de la tabla a generar en PDF como las correspondencias con los datos obtenidos desde la base de datos.
$totEmp = mysql_num_rows($resEmp); $ixx = 0; while($datatmp = mysql_fetch_assoc($resEmp)) { $ixx = $ixx+1; $data[] = array_merge($datatmp, array('num'=>$ixx)); } $options = array( 'shadeCol'=>array(0.9,0.9,0.9), 'xOrientation'=>'center', 'width'=>500 );
Generamos el array necesario y con el formato necesario a partir de los datos obtenidos en la consulta a la base de datos. Fijamos un espaciado de columnas, una alineación de la tabla y su ancho.
$pdf->ezText($txttit, 9); $pdf->ezTable($data, $titles, '', $options); $pdf->ezText("\n\n\n", 7); $pdf->ezText("Fecha: ".date("d/m/Y"), 7); $pdf->ezText("Hora: ".date("H:i:s")."\n\n", 7); $pdf->ezStream();
Y por último, generamos el PDF con los datos generados anteriormente y, además, hacemos que se muestre la fecha y la hora de su creación en la propia hoja PDF.
A continuación os dejo el código completo para que podais utilizarlo mejor:
<?php require_once('./lib/PDF/class.ezpdf.php'); $pdf =& new Cezpdf('a4'); $pdf->selectFont('./lib/PDF/fonts/Courier.afm'); $pdf->ezSetCmMargins(1,1,1.5,1.5); $conexion=mysql_connect("localhost","sergio","sergio") or die(mysql_error()); mysql_select_db("proyecto",$conexion) or die(mysql_error()); $resEmp= ""; $titles= ""; $txttit=""; $resEmp = mysql_query("SELECT * FROM usuario") or die(mysql_error()); $txttit = "Informe de todos los usuarios\n"; $titles = array( 'id'=>'ID', 'nombre'=>'Nombre', 'apellidos'=>'Apellidos', 'telefono'=>'Teléfono', 'direccion'=>'Dirección', 'CP'=>'Código Postal', 'ciudad'=>'Ciudad', 'provincia'=>'Provincia', 'fecha_nacimiento'=>'Fecha de Nacimiento', 'mail'=>'Email', 'login'=>'Login' ); $totEmp = mysql_num_rows($resEmp); $ixx = 0; while($datatmp = mysql_fetch_assoc($resEmp)) { $ixx = $ixx+1; $data[] = array_merge($datatmp, array('num'=>$ixx)); } $options = array( 'shadeCol'=>array(0.9,0.9,0.9), 'xOrientation'=>'center', 'width'=>500 ); $pdf->ezText($txttit, 9); $pdf->ezTable($data, $titles, '', $options); $pdf->ezText("\n\n\n", 7); $pdf->ezText("Fecha: ".date("d/m/Y"), 7); $pdf->ezText("Hora: ".date("H:i:s")."\n\n", 7); $pdf->ezStream(); ?>
Para hacer que todo funcion basta con invocar al fichero que implemente este código y automáticamente se generará el PDF. A partir de aquí, solo tenemos que dejar volar nuestra imaginación para generar PDFs por ejemplo para obtener informes de usuarios o cualquier operación que registremos en nuestra base de datos.
Como siempre, espero que os sirva de ayuda.