Crear un reporte con FPDF usando PHP y MySQL

Escrito por: el

MySQL, PHP

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.

<?php
include_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 fpdf
require('fpdf/fpdf.php');
// incluimos la conexion a la base de datos
require('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_medico
FROM consultas_medicas
Inner Join pacientes ON consultas_medicas.id_paciente = pacientes.id_paciente
Inner Join medicos ON consultas_medicas.id_medico = medicos.id_medico
WHERE 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.

Actualizacones:

  • Se colorean la filas de titulo y las de datos en el historial en pdf, para realizar esto se le agrego el valor true al parametro fill dentro de la función MultiCell que es la que permite heredar de SetFillColor el color de fondo en formato rgb.

A continuación les dejo el código y la base de datos para descargar. Descarga: Mediafire – reporte_clinicaMega – reporte_clinica.

código de respuesta al comentario de por que tantos echo:

<?php
include_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);
 ?>
<table cellpadding="0" cellspacing="0" width="100%">
<thead><tr><td>No.</td><td>CLAVE</td><td>NOMBRE</td><td>HISTORIAL</td></tr></thead>
<?php
for ($i=0; $i<$numfilas; $i++)
{
$fila = mysql_fetch_array($pacientes);
$numlista = $i + 1;
?>
<tr><td><?php echo $numlista; ?></td>';
<td><?php echo $fila['clave']; ?></td>';
<td><?php echo $fila['nombre'].' '.$fila['apellido_paterno'].' '.$fila['apellido_materno']; ?></td>
<td><a href="reporte_historial.php?id=<?php echo $fila['id_paciente']; ?>">ver</a></td></tr>
<?php
}
?>
</table>

75 comentarios acerca de “Crear un reporte con FPDF usando PHP y MySQL

  1. Roman Hernandez comentó:

    Excelente ejemplo, muy sencillo y altamente funcional.
    gracias

    • carlos espinoza comentó:

      Hola muy buen aporte pero al checar tu codigo me tope con esta linea for ($i=0; $iRow(array($fila['fecha_consulta'], $fila['consultorio'], $fila['nombre_medico'], $fila['diagnostico']));
      no logro comprender como es que funciona este for

      • andrea comentó:

        estoy mirandome el ejemplo y me pasa lo mismo que a ti, este for no me funciona:

        for ($i=0; $iRow(array($fila['fecha_consulta'], $fila['consultorio'], $fila['nombre_medico'], $fila['diagnostico']));

  2. Emmanuel comentó:

    Muchas gracias justo lo que andaba buscando super claro y funcionando!!!1

  3. ponzho comentó:

    me marca varios errores de sintaxsis

    while($i$wmax)//error
    {
    if($sep==-1)
    {
    if($i==$j)
    $i++;
    }
    else
    $i=$sep+1;
    $sep=-1;
    $j=$i;
    $l=0;
    $nl++;
    }
    else //error
    $i++;
    }
    return $nl;
    }
    en el while falta hacer la comparacion creo que es mientras $i<$wmax y hay un else sin un if
    al final tres llaves que cierran, cuando solo hay dos que abren

    • sun2012 comentó:

      Hola, pues que yo vea todas están cerradas, puedes bajar el archivo y probarlo funciona perfectamente, saludos.

    • sun2012 comentó:

      HOla, si tienes razon en el post tiene unos errores, es que el script que pinta el code creo que los borro, pero el de descarga esta corecto.
      si no puedes checar en http://www.fpdf.org/en/script/script3.php esta el script original

    • Mario comentó:

      Buen trabajo, pero tengo una duda yo tengo la URL de mis imagenes de productos y estoy haciendo esto:
      $URimg= “../photos/”.$fila['imagen'];
      $imagen = ”;
      $pdf->Row(array($fila['Cantidad'], $fila['ItemDes'], $fila['ItemCod'], $fila['PrecioUnitario'], $fila['Importe'],$imagen));

      como observaras estoy adaptando tu ejemplo en uno propio, y lo que hago es agregarle la ruta completa a una variable para posteriormente imprimir en el array, pero no me muestra la imagen mas al contrario solo me muestra esto: por mencionar un ejemplo.
      gracias

      • sun2012 comentó:

        Hola, es que en fpdf existe al funcion Image(‘logo_pb.png’,10,8,33) para mostrar imagenes, saludos.

        • Mario comentó:

          Gracias Oscar por responder, mira si puedes agregarme al Skype mi cuenta es marioarroyovaca .
          mira yo quiero hacerlo dinamicamente es decir quiero realizar una proforma en la cual debo de mostrar las imagenes y fijate como le paso los datos:
          while($fila=mysql_fetch_assoc($SqlArchivo))
          {
          $URimg= “../photos/”.$fila['imagen'];
          $imagen = ”;
          $pdf->Row(array($fila['Cantidad'], $fila['ItemDes'], $fila['ItemCod'], $fila['PrecioUnitario'], $fila['Importe'], $imagen));

          }
          el PDF me genera bien pero solo que la parte donde estoy imprimiendo $imagen me imprime lo siguiente: es decir solo me imprime totalmente plano. y si te comento que estoy utilizando lo que me mencionas y me muestra bien por cierto el logo de la empresa.
          function Header()
          {
          $this->SetFont(‘Arial’,’B’,10);
          $this->Image(‘../CapaPresentacion/Imagenes/system_logo.png’,20,10,45,22);
          $this->Text(116,14,’PRESUPUESTO DE VENTA’,0,’C’, 0);
          $this->Image(‘../CapaPresentacion/Imagenes/system_logo.png’,224,10,35,18);
          $this->Ln(30);
          }

          • sun2012 comentó:

            en vez de $imagen seria Image(‘$image’,20,10,45,22); aun que necesitarías aumentar ala posicion segun el tamaño de tu tabla ya que los dos datos primeros son el eje x y y y lod emas el tamaño, jeje

      • sun2012 comentó:
    • sun2012 comentó:

      hola, pues si quieres ver el original de la class esta es el link http://www.fpdf.org/en/script/script16.php

  4. ponzho comentó:

    ya descargue el ejemplo, ahi si esta correctamente el codigo y todo, muchas gracias funciona de maravilla y muy practico

  5. ezequiel comentó:

    sencillo eso? Es código morse sobre todo las funciones. No quiero imaginarme un ejemplo avanzado, yo lo único que quiero es generar un reporte y parece q tenes que poner un código de 140 renglones.

    • sun2012 comentó:

      Pues es igual, solo es una class que ya esta definida

  6. Aida comentó:

    Excelente ejemplo, funciona de maravilla.

  7. Alberto comentó:

    Muy buen ejemplo, te agradesco mucho por haberlo compartido, lo he ejecutado y va de 10.

    Aprovechando me gustaría consultarte como puedo hacer para repetir las filas del titulo de la tabla (fecha, médico, consultorio y diagnóstico) en las siguientes hojas del historial médico, ya que cuando se generá el pdf que contiene más de 1 página la fila del título de la tabla (fecha, médico, consultorio y diagnóstico) ya no aparece, sino que solo en la primera.

    De antemano gracias

    • sun2012 comentó:

      Hola, pues si puedes seccionar el numero de registros por pagina, saludos.

      • jaironman comentó:

        hola no entendi del todo tu explicacion por favor puedes explicarla mejor, es que estoy utilizando esta herramienta para reportes que tienen varias paginas y me gustaria que los nombres de las tablas esten en cada pagina.. te agradezco de antemano

  8. jristokolev comentó:

    Prueben esta libreria para generar reportes. Una de las mejores opciones que he visto. No esta del todo completa pero otra opcion para hacernos la vida mas facil.
    https://github.com/yordis/reportexpress

    • sun2012 comentó:

      hola, pues la verdad este post ya esta desactualizado la nueva versión de fpdf ya trae las funciones integradas y es como usar un datagrid, en breve loa actualizare, saludos.

    • Yordis Prieto comentó:

      nunca pense que alguien estubiera usando la libreria por eso me aparte de seguir actualizandola, se que este post es viejo pero la has usado?? como te ha ido? crees que le interese a alguien las actualizaciones??

  9. henry comentó:

    excelente tuto, muchas gracias por compartirlo.

  10. Alex comentó:

    tengo el siguente error

    ( ! ) Notice: Undefined index: id_paciente in C:\wamp\www\dcsystems\reporte_historialmed.php on line 127

  11. Lexar comentó:

    Hola abra la manera de insertar hora y fecha a un reporte que estoy generando?

  12. Andres comentó:

    Como hago para mermar el tamaño de las celdas FECHA, MEDICO, CONSULTORIO y DIAGNOSTICO?? he intentado cambiar algunas cosas pero no me ha dado resultado. Muchas gracias!

  13. vale comentó:

    Parse error: syntax error, unexpected ‘)’, expecting ‘;’ in C:\xampp\htdocs\Nueva carpeta\reporte_historial.php on line 21

    Me sale este error y no se como resolverlo cuando le doy clic al enlace VER MAS…en el diagnostico del paciente

    • vale comentó:

      for($i=0;$iNbLines($this->widths[$i],$data[$i])); en esta linea

  14. Kari Robledo comentó:

    Muchas gracias, me sirvió mucho para un proyecto.

  15. Bryan comentó:

    Excelente Esta Información Me Sirvió Bastante de guía.
    una preguntacomo hago para meter un dato que extraje de la base de datos en el header(Cabecera) de la pagina Gracias

    • sun2012 comentó:

      Hola, pues igual que como imprimes el reporte, haces tu consulta y lo imprimes.saludos.

  16. Oscar comentó:

    como puedo hacer para repetir las filas del titulo de la tabla (fecha, médico, consultorio y diagnóstico) en las siguientes hojas del historial médico, ya que cuando se generá el pdf que contiene más de 1 página la fila del título de la tabla (fecha, médico, consultorio y diagnóstico) ya no aparece, sino que solo en la primera.

  17. sun2012 comentó:

    los encabezados de tu tabla ponlos en al funcion header y listo, saludos.

    • Oscar comentó:

      Sos un genio , ya lo hice y funciona de mil maravillas!!!

      Muchisimas gracias !!

  18. mili comentó:

    Hola esta muy bueno tu ejemplo pero tengo un problema cuando ejecuto reporte_historial.php muestra el pdf con la tabla pero mas no carga datos y eso es lo que necesito que genere con los datos que tenga en la tabla de la base de datos a imprimir lo muestra vacío, y así no me sirve para aplicarlo a mi proyecto me puedes ayudar por favor.??? gracias

  19. giovanny orozco comentó:

    hola, el ejemplo funciona bastante bien pero tengo una duda.
    si una de las celdas queda mas alta por que el texto no cabe en el ancho, las otras celdas de esa misma también crecen en el alto pero el color de fondo no no baja hasta el total del alto este se queda como estaba.

    si alguien puede ayudarme seria genial.
    gracias.

    • sun2012 comentó:

      en la function Row($data) esta la siguiente linea $this->Rect($x,$y,$w,$h); la debes sustituir por $this->Rect($x,$y,$w,$h, ‘F’ ); o $this->Rect($x,$y,$w,$h, ‘FD’); y pintara todo el cuadro, ya que con la funcion Rect no tenia ninguna propiedad asignada solo dibujaba el border y la funcion Multicell solo pintaba el contenido, al colocar las propiedades las hereda el rectángulo y también sera rellenado, saludos.

      Para mas información:
      http://www.fpdf.org/es/doc/rect.htm

  20. Mercedes comentó:

    Hola, ya logre generar un reporte, es para una constancia de trabajo por ende necesito campos de varias tablas… Logro hacerlo obvio con la primera pero me podrias comentar como puedo agregar los datos de las otras 3 o 4 y si hay alguna forma de que el texto quede completamente justificado porque hasta ahora lo tengo descuadrado a pesar de colocar en el multicell justificado… Gracias si lo ves es urgente

    • denker comentó:

      Hola Mercedes.

      Para mostrar en el pdf datos de diferentes tablas solo tienes que crear tus consultas correspondientes y recorrer los resultados dependiendo de como quieras presentarlas. Para que tu texto aparezca justificado la opción la indicas en MultiCell.

      Saludos

  21. pedro comentó:

    buen aporte me sirvió bastente.. gracias

  22. luigi comentó:

    Super Agradecido con tu demostración, por fin he podido realizar las constancias que tanto
    trabajo me había llevado. Saludos desde Caracas-Venezuela

  23. jorge comentó:

    oye muchas gracias por por los codigos, pero tengo un problema! que solo me sale esto:

    Pacientes
    NO. CLAVE NOMBRE HISTORIAL

    y no puedo ingresar datos, si me podrías orientar te lo agradecería porfa.

    • denker comentó:

      Hola Jorge. Te marca algun error?

    • sun2012 comentó:

      Hola, pues tienes que restaurar la base de datos, no existe un formulario que los registre hay que crearlo, saludos.

      • jorge comentó:

        Gracias denker Dios te continué bendiciendo.

  24. jorge comentó:

    Amigo como puedo hacer una consulta o relacionar 2 tablas para que salga asi como la tienes en el codigo que cuando presione ver pueda ver el reporte, nose si me entiendes, es que soy nuevo en esto estas son las 2 tablas

    INSERT INTO `crediticio`.`beneficiario` (
    `cod_id` ,
    `cedula` ,
    `nombres` ,
    `apellidos` ,
    `fecha_nac` ,
    `sexo` ,
    `telafono` ,
    `celular` ,
    `direccion` ,
    `prestamo_id` ,
    `comuna_id` ,
    `estado_civil`
    )
    VALUES (
    ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”, ”
    );

    y esta es la otra

    esto es lo que quiero que salga en el reporte

    INSERT INTO `crediticio`.`prestamo` (
    `beneficiario_id` ,
    `fecha` ,
    `tipo_prestamo` ,
    `cuota_id` ,
    `motivo`
    )
    VALUES (
    ”, ”, ”, ”, ”
    );

    si me puedes ayudar te lo agradecere mucho.

    • sun2012 comentó:

      hola puedes usar Inner Join ejemplos en http://www.w3schools.com/sql/sql_join_inner.asp

      • jorge comentó:

        muchas gracias hno pero en realidad soy nuevo en esto y necesito un poco más ayuda de como relacionarla, si me la podrias hacer con un ejemplo, te lo agradecere mucho.

  25. jorge comentó:

    sun2012 eso se podria hacer con una sola tabla? la consulta asi como lo tienes en el codigo, que se muestre la informacion al principio y luego al presionar ver se vaya a la parte de reporte y asi con los demas usuarios que se vayan agregando? porfa necesito ayuda.

  26. drake bryan comentó:

    me lo pueden descargar urgentemente y enviarmelo a mi correo porfavor lo necesito estoy en mi clase siii lo necesito gracias mi correo es brayaan_6_12@hotmail.com

  27. Yordis Prieto comentó:

    Hola a todos aqui les dejo una libreria para generar reportes esta en su version beta aun me falta por adicionar varias cosas pero si quieren check y hagan pull request el concepto me gusta comentar el codigo y es bastante limpio. La idea original parte de iReport uno de los mejores programas para generar reportes. Solo envienme sus preguntas y me gustaria saber si les interesa

    https://github.com/yordis/reportexpress

  28. Marianela comentó:

    Hola, uso el ejemplo y anda perfecto pero tengo un problemita, cuando descargo el pdf, y lo visualizo con el adobe reader 10.1.8, las tablas salen sin bordes, ni renglones, alguien sabria como solucionar eso??? Gracias!

  29. Marianela comentó:

    Ya solucione! Saludos

  30. DavidHdez06 comentó:

    Muy buen aporte, me sirvio de mucho gracias

  31. Victor comentó:

    No sé si es el sitio más indicado, pero una consulta.
    ¿como hago para cargar imagenes dinámicamente en fpdf y que no me las corte?.
    Me explico: tengo una funcion que sube las imagenes manteniendo las proporciones (1488x2105px como máximo). Pero al pasear esa imagen a pdf en algunos casos me las corta.

    mi funcion para generar pdf es esta:

    AddPage();
    $size=190;
    $absx=(210-$size)/2;
    $pdf->Image($ruta,$absx,1,$size,’JPG’);
    $nombreImagen=basename($ruta, “.jpg”);
    $rutapdf=”../../ofertas/pdf/”.$nombreImagen.”.pdf”;
    $pdf->Output($rutapdf);
    ?>
    Gracias por vuestro tiempo

  32. Victor comentó:

    Soy yo de nuevo, he modificado el codigo y de esta manera solo me lo deforma en imagenes alargadas verticales:
    $pdf=new FPDF();
    //Primera página
    $pdf->AddPage();
    //$size=190;

    if($miniatura_ancho == 1488){
    $pdf->Image($ruta,0,0,210,’JPG’);
    }else {
    $pdf->Image($ruta,0,0,210,297,’JPG’);
    }

    $nombreImagen=basename($ruta, “.jpg”);

    $rutapdf=”../../ofertas/pdf/”.$nombreImagen.”.pdf”;
    $pdf->Output($rutapdf);
    ?>

    Pero no se como hacer para que me recoja la proporcion en el else, ya el si en lugar de 210 lo dejo vacio me lo interpretará como que 297 es el ancho.

    No sé si me estoy explicando :-(

    • sun2012 comentó:

      Hola, lo que no entiendo quieres que el pdf salga del tamaño de la imagen o que se ajuste al tamaño carta por ejemplo, saludos.

      • Victor comentó:

        Mi idea era que la imagen se ajuste al tamaño de la hoja (pdf), pero manteniendo las proporciones.

        Pensé que era un problema al trabajar con centímetros y píxeles e hice otro cambio en el código:

        $pdf=new FPDF(‘P’,’pt’,array(1488,2105));
        $pdf->AddPage();
        $x=$miniatura_ancho;
        $y=$miniatura_alto;
        if($miniatura_ancho == 1488){
        $pdf->Image($ruta,0,0,1488,$y,’JPG’);
        }else {
        $pdf->Image($ruta,0,0,$x,2105,’JPG’);
        }

        $nombreImagen=basename($ruta, “.jpg”);

        $rutapdf=”../../ofertas/pdf/”.$nombreImagen.”.pdf”;
        $pdf->Output($rutapdf);

        Pero solo me funciona con imagenes anchas. Cuando son más largas que la hoja me las deforma.

        Muchas gracias por el interés sun2012

  33. aNTONIO comentó:

    Hola que tal disculpen tengo un error al agregar filas solamente me deja agregar 5 filas
    me dice que tengo un error en esta parte del codigo.

    function Row($data)
    {
    // calculando la altura de la fila
    $nb=0;
    for($i=0;$iNbLines($this->widths[$i],$data[$i]));
    $h=5*$nb;
    // publique una suspensión de la página primero si necesitado
    $this->CheckPageBreak($h);
    /// dibuje las celdas de la fila
    for($i=0;$iwidths[$i];
    $a=isset($this->aligns[$i]) ? $this->aligns[$i] : ‘L';
    // guarda la posición actual

  34. gabriel comentó:

    esta bueno valeeee..siga adelante

  35. Arturo comentó:

    En mi caso uso XAMPP, y al intentar cargar desde la barra de direcciones dice:

    Pacientes
    [:(] Error al conectar a la base de datos

    me puede ayudar, soy novato….
    harturo_ramirez@hotmail.com

  36. Arturo comentó:

    En mi caso uso XAMPP, y al intentar cargar desde la barra de direcciones dice:

    Pacientes
    [:(] Error al conectar a la base de datos

    me puede ayudar, soy novato….
    harturo_ramirez@hotmail.com

    • sun2012 comentó:

      hola,
      1.- puede ser por que no has creado la base de datos.
      2.- en el archivo de conexión hay que cambiar el usuario, clave y nombre de la base de datos.
      saludos.

  37. Ivan Aguirre comentó:

    Hola que tal muy buen post, me agrado mucho, pero al momento que pasa para convertirlo o mostrarlo en PDF me sale este error:

    FPDF error: Some data has already been output, can’t send PDF file

    ¿Que podria ser?, o como se puede solucionar

  38. PAtY comentó:

    a mi me funciono de maravilla!:.. de hecho me salvo este dia de trabajo!… MILLLLL GRACIAS!..

  39. rodrigo comentó:

    hola como puedo hacer para imprimir directamente el pdf, es decir que se genere por código y directamente salga impreso?

    • sun2012 comentó:

      No se puede,sólo html puedes mandar a imprimir con javascript pero el PDF no se puede automáticamente

  40. Jason Todd comentó:

    Hola, buen post y muy efectivo.
    Pero no se puede hacer de otra manera que no sea… echo, echo, echo, echo
    el html?

    Saludos.

    • sun2012 comentó:

      hola, pues cada quien lo hace como quiera, si quieres puedes cerra las etiquetas php y poner el código html sin el echo y ya solo cuando necesites imprimir las variables pues abres y cierras las etiquetas de php.

      al final del articulo pongo el ejemplo, saludos.

      • Jason Todd comentó:

        Entiendo, gracias. >:D

Que te pareció el contenido, déjanos un comentario!!

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>