CREAR UN REPORTE CON FPDF USANDO PHP Y MYSQL
En este post realizaremos un historial clínico de un paciente, en el cual contendrá los datos generales del paciente y un listado de las consultas médicas que realizo, el historial estará en formato PDF. Para realizar esto utilizaremos: el lenguaje de programación PHP, el gestor de base de datos MySQL y la librería FPDF. Lo primero es realizar nuestra base de datos la cual llamaremos clínica, en donde contendrá las siguientes tablas y la siguiente estructura.
Tabla pacientes
CREATE TABLE IF NOT EXISTS `pacientes` (`id_paciente` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`clave` varchar(10) NOT NULL,`nombre` varchar(80) NOT NULL,`apellido_paterno` varchar(80) NOT NULL,`apellido_materno` varchar(80) NOT NULL,`sexo` varchar(2) NOT NULL,`domicilio` text NOT NULL,PRIMARY KEY (`id_paciente`)) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
Tabla médicos
CREATE TABLE IF NOT EXISTS `medicos` (`id_medico` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`cedula` varchar(10) NOT NULL,`nombre_medico` varchar(200) NOT NULL,PRIMARY KEY (`id_medico`)) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
Tabla consultas_medicas
CREATE TABLE IF NOT EXISTS `consultas_medicas` (`id_consulta` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`fecha_consulta` date NOT NULL,`id_paciente` int(5) NOT NULL,`id_medico` int(5) NOT NULL,`consultorio` varchar(20) NOT NULL,`diagnostico` text NOT NULL,PRIMARY KEY (`id_consulta`)) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
Des pues creamos los siguientes archivos: conexion.php Contiene los parámetros para conectarse a la base de datos y realiza las conexiones.
<php class DB{ var $conect; var $BaseDatos; var $Servidor; var $Usuario; var $Clave; function DB(){ $this--->BaseDatos = "clinica";$this->Servidor = "localhost";$this->Usuario = "clinic";$this->Clave = "clinica123";}function conectar() {if(!($con=@mysql_connect($this->Servidor,$this->Usuario,$this->Clave))){echo"Error al conectar a la base de datos";exit();}if (!@mysql_select_db($this->BaseDatos,$con)){echo "Error al seleccionar la base de datos";exit();}$this->conect=$con;return true;}}?> |
index.php Realiza el listado de los pacientes en la base de datos y envía la orden de generar el archivo PDF, para ello manda el identificador del paciente por medio de la url y lo recibe el archivo reporte_historial.php por $_GET.
<?phpinclude_once("conexion.php");$con = new DB;$pacientes = $con->conectar();$strConsulta = "SELECT id_paciente, clave, nombre, apellido_paterno, apellido_materno from pacientes";$pacientes = mysql_query($strConsulta);$numfilas = mysql_num_rows($pacientes);echo '<table cellpadding="0" cellspacing="0" width="100%">';echo '<thead><tr><td>No.</td><td>CLAVE</td><td>NOMBRE</td><td>HISTORIAL</td></tr></thead>';for ($i=0; $i<$numfilas; $i++){$fila = mysql_fetch_array($pacientes);$numlista = $i + 1;echo '<tr><td>'.$numlista.'</td>';echo '<td>'.$fila['clave'].'</td>';echo '<td>'.$fila['nombre'].' '.$fila['apellido_paterno'].' '.$fila['apellido_materno'].'</td>';echo '<td><a href="reporte_historial.php?id='.$fila['id_paciente'].'">ver</a></td></tr>';}echo "</table>";?> |
reporte_historial.php Realiza el reporte mediante la librería FPDF. 1. En la primera parte llamamos a la libreria fpdf y al archivo conexion para conectar php con la base de datos.
<?php // incluimos la libreria fpdfrequire('fpdf/fpdf.php');// incluimos la conexion a la base de datosrequire('conexion.php'); |
2. Le insertamos una clase que tiene las siguientes funciones: crear tablas, encabezado y pie. Esta clase fue tomada de los tutoriales de la página oficial de la librería FPDF. Ya que la función multiCell no permite ordenarse por tablas y la función Cell solo funciona en un solo renglón y no mostraría cuando hay muchos más caracteres.
class PDF extends FPDF { var $widths; var $aligns; function SetWidths($w) { $this->widths=$w;}function SetAligns($a){$this->aligns=$a;}function Row($data){$nb=0;for($i=0;$iNbLines($this->widths[$i],$data[$i]));$h=4*$nb;$this->CheckPageBreak($h);for($i=0;$iwidths[$i];$a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';$x=$this->GetX();$y=$this->GetY();$this->Rect($x,$y,$w,$h);$this->MultiCell($w,4,$data[$i],0,$a);$this->SetXY($x+$w,$y);}$this->Ln($h);}function CheckPageBreak($h){if($this->GetY()+$h>$this->PageBreakTrigger)$this->AddPage($this->CurOrientation);}function NbLines($w,$txt){$cw=&$this->CurrentFont['cw'];if($w==0)$w=$this->w-$this->rMargin-$this->x;$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;$s=str_replace("\r",'',$txt);$nb=strlen($s);if($nb>0 and $s[$nb-1]=="\n")$nb--;$sep=-1;$i=0;$j=0;$l=0;$nl=1;while($i$wmax){if($sep==-1){if($i==$j)$i++;}else$i=$sep+1;$sep=-1;$j=$i;$l=0;$nl++;}else$i++;}return $nl;}function Header(){$this->SetFont('Arial','',10);$this->Text(65,14,'Clinica el sol naciente',0,'C', 0);$this->Ln(30);}function Footer(){$this->SetY(-15);$this->SetFont('Arial','B',8);$this->Cell(100,10,'Historial medico',0,0,'L');}} |
3. Recibir el id del paciente, para ello lo obtenemos mediante $_GET.
$paciente= $_GET['id']; |
4. Mostrar los datos del paciente.
// creamos el objeto FPDF$pdf=new PDF('L','mm','Letter'); // vertical, milimetros y tamaño$pdf->Open();$pdf->AddPage(); // agregamos la pagina$pdf->SetMargins(20,20,20); // definimos los margenes en este caso estan en milimetros$pdf->Ln(10); // dejamos un pequeño espacio de 10 milimetros// Realizamos la consulta$con = new DB;$pacientes = $con->conectar();// $paciente contiene el id del paciente a consultar, obtiene los datos de la tabla pacientes$strConsulta = "SELECT * from pacientes where id_paciente = '$paciente'";$pacientes = mysql_query($strConsulta);$fila = mysql_fetch_array($pacientes);// listamos los datos con Cell$pdf->SetFont('Arial','',12); // definimos el tipo de letra y el tamaño// Cell esta formado por (posición de inicio, ancho, texto, borde, cambio de linea, posición del texto)$pdf->Cell(0,6,'Clave: '.$fila['clave'],0,1);$pdf->Cell(0,6,'Nombre: '.$fila['nombre'].' '.$fila['apellido_paterno'].' '.$fila['apellido_materno'],0,1);$pdf->Cell(0,6,'Sexo: '.$fila['sexo'],0,1);$pdf->Cell(0,6,'Domicilio: '.$fila['domicilio'],0,1);$pdf->Ln(10); |
5. Listar el historial del paciente Para listar el historial medico en forma de tablas llamaremos a las funciones antes declaradas de la siguientes forma, primero creamos el encabezado de nuestra tabla de la siguiente manera:
// Para realizar esto utilizaremos la funcion Row()$pdf->SetFont('Arial','',10);// tipo y tamaño de letra$pdf->SetWidths(array(60, 60, 60, 60));// Definimos el tamaño de las columnas, tomando en cuenta que las declaramos en milimetros, ya que nuestra hoja esta en milimetros.$pdf->Row(array('FECHA', 'MEDICO', 'CONSULTORIO', 'DIAGNOSTICO'));// creamos nuestra fila con las columnas fecha(fecha de la visita al medico), medico(nombre del medico que nos atendio), consultorio y el diagnostico en esa visita. |
Despues de crear el encabezado de nuestra tabla obtendremos el historial desde la base de datos y lo mostraremos en nuestro archivo pdf creado, seguiremos utilizando la función Row().
$historial = $con->conectar(); // Creamos nuestra conexión a la base de datos// Realizamos nuestra consulta$strConsulta = "SELECT consultas_medicas.fecha_consulta, consultas_medicas.consultorio, consultas_medicas.diagnostico, medicos.nombre_medicoFROM consultas_medicasInner Join pacientes ON consultas_medicas.id_paciente = pacientes.id_pacienteInner Join medicos ON consultas_medicas.id_medico = medicos.id_medicoWHERE pacientes.id_paciente = '$paciente'";// ejecutamos la consulta$historial = mysql_query($strConsulta);// listamos la tabla de historial de visitas de cada paciente$numfilas = mysql_num_rows($historial);for ($i=0; $iRow(array($fila['fecha_consulta'], $fila['consultorio'], $fila['nombre_medico'], $fila['diagnostico']));}//La ultima linea$pdf->Output(); lo que hace es cerrar el archivo y enviarlo al navegador. |
No hay comentarios.:
Publicar un comentario