Foros del Web » Programando para Internet » PHP »

Ayuda con FPDF

Estas en el tema de Ayuda con FPDF en el foro de PHP en Foros del Web. Hola que tal. Estoy iniciándome en el aprendizaje de la librería FPDF para enviar una consulta de la base de datos mysql con php, y ...
  #1 (permalink)  
Antiguo 30/10/2010, 10:02
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Ayuda con FPDF

Hola que tal.

Estoy iniciándome en el aprendizaje de la librería FPDF para enviar una consulta de la base de datos mysql con php, y he visto los ejemplos del sitio original de la librería, y he utilizado algunas function en mi scripts, el cual dejo a continuación, y me gustaria que por favor si alguien de ustedes me puede ayudar o explicarme que tengo que hacer para que la página en pdf creada me muestre los datos de la consulta por la cual extraigo los datos, solo me muestra el encabezado de la tabla con sus titulos y en color, tal como el ejemplo, pero no muestra los datos solicitados en la consulta.

Este es el código

<?php
require('fpdf.php');
require('../clases/conexion.class.php');


$sql='SELECT * FROM empresa';
$res=mysql_query($sql,Conectar::con());

class PDF extends FPDF
{

function FancyTable($header,$data)
{
//Colores, ancho de línea y fuente en negrita
$this->SetFillColor(255,0,0);
$this->SetTextColor(255);
$this->SetDrawColor(128,0,0);
$this->SetLineWidth(.3);
$this->SetFont('','B');
//Cabecera
$w=array(40,35,40,45);
for($i=0;$i<count($header);$i++)
$this->Cell($w[$i],7,$header[$i],1,0,'C',1);
$this->Ln();
//Restauración de colores y fuentes
$this->SetFillColor(224,235,255);
$this->SetTextColor(0);
$this->SetFont('');
//Datos
$fill=false;
while($row=mysql_fetch_assoc($res))
{
$this->Cell($w[0],6,$row['idemp'],'LR',0,'L',$fill);
$this->Cell($w[1],6,$row['nombre'],'LR',0,'L',$fill);
$this->Cell($w[2],6,$row['direccion'],'LR',0,'R',$fill);
$this->Cell($w[3],6,$row['telefono'],'LR',0,'R',$fill);
$this->Ln();
$fill=!$fill;
}
$this->Cell(array_sum($w),0,'','T');
}
}
$pdf=new PDF();
//Títulos de las columnas
$header=array('ID Empresa','Nombre','Direccion','Telefono');
$pdf->SetFont('Arial','',14);
$pdf->AddPage();
$pdf->FancyTable($header,$data);
$pdf->Output();
?>

De antemanos muchas gracias
Un Cordial saludo desde Valparaíso - Chile
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #2 (permalink)  
Antiguo 30/10/2010, 12:05
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ayuda con FPDF

seguro leiste la documentacion oficial?? http://www.fpdf.org/ si te fijas ahi los datos que contiene la tabla los pasan por medio de un archivo .txt en un formato array si los datos que tu deseas en mi caso cuando lo he utilizado he echo esto
Código PHP:
Ver original
  1. while($row=mysql_fetch_assoc($query))
  2.      $data[]=array_merge($row,array('obv'=>$condicion),array('puntos'=>$puntos));  
  3. }
  4. $header=array('los titulos');  
  5. $this->tablaRecord($header,$data);
te lo explico cuando realizo la consulta todos los datos los meto en una variable llamada $data usando array_merge luego lo que este ahi que son los datos de mi consulta y otros que te puse de ejemplo como el
Cita:
array('obv'=>$condicion)
para que puedas meter datos que no venen directamente de la bd paso ese array resultante a la funcion que me crea la tabla fpdf en mi caso se llama tabla en tu caso seria
Cita:
FancyTable($header,$data);
, entonces en conclusion no te mostraba datos xq sencillamente no le estas pasando ningun dato a la funcion que llama a la tabla investigar un poco no hace daño a nadien saludos espero que te sirva y me entiendas xq creo que lo complique jaja
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 31/10/2010, 06:54
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda con FPDF

La verdad que me lo complicaste mas, he leido los tutoriales y los manuales, y en ninguna parte encuentro como trabajar con base de datos, ni la forma que tu me indicas.

Perdona que sea tan burro, pero recien estoy comenzando con esto de los FPDF, porque creo que es mejor y mas elegante hacer reportes con este sistema que maquetear la página con css para imprimir.

De todas maneras muchas gracias por tu respuesta, seguiré investigando.

Un Cordial saludo
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #4 (permalink)  
Antiguo 31/10/2010, 09:06
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ayuda con FPDF

voy a intentar colocarlo mas sencillo, la funcion que te crea la tabla
Cita:
FancyTable($header,$data);
te pide dos parametro, el primero es un array con las cabeceras que eso ya lo tienes, el segundo parametro es un array mayormente asociativo con los datos que vas a mostrar dentro de la tabla, cuando haces una consulta y tomas los valores por el mysql_fetch_assoc recibes un array asociativo en el caso del ejemplo
Código PHP:
Ver original
  1. while($row=mysql_fetch_assoc($query))
  2.      $data[]=array_merge($row,array('obv'=>$condicion),array('puntos'=>$puntos));  
  3. }
el query es obvio que tu lo conoces que es tu consulta, $data es la variable donde estas guardando los datos que traes de tu consulta y vas a pasar como parametro a la funcion que te crea la tabla, uso el array_merge para combinar varios array xq en mi caso necesitava una opcion adicional
Cita:
$data[]=array_merge($row,array('obv'=>$condicion),array('puntos'=>$puntos));
fijate $row es el array asociativo que me llega de la base de datos y lo que te coloque en negrita son otras opciones que necesitava, una vez echo esto ya tenemos los dos parametros de la funcion FancyTable($header,$data); ahora que queda llamarla y te deberia de dar, claro en la pagina de FPDF recorren con un foreach el array de datos
Cita:
Código PHP:
Ver original
  1. foreach($data as $row)
  2.     {
  3.         $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
  4.         $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
  5.         $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R',$fill);
  6.         $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);
  7.         $this->Ln();
  8.         $fill=!$fill;
  9.     }
yo lo trabaje con foreach pero con un bucle que te recorra tu array de datos te debe funcionar espero que ahora si me alla echo entender xq avece o mejor dicho casi siempre lo complico jaja saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 31/10/2010, 09:32
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda con FPDF

Gracias nuevamente, por darte el tiempo de explicarme.

Quedo Así y solo muestra una página en blanco

<?php
require('fpdf.php');
require('../clases/conexion.class.php');

$sql='SELECT * FROM empresa';
$res=mysql_query($sql,Conectar::con());

class PDF extends FPDF
{

function FancyTable($header,$data)
{
//Colores, ancho de línea y fuente en negrita
$this->SetFillColor(255,0,0);
$this->SetTextColor(255);
$this->SetDrawColor(128,0,0);
$this->SetLineWidth(.3);
$this->SetFont('','B');
//Cabecera
$w=array(40,35,40,45);
for($i=0;$i<count($header);$i++)
$this->Cell($w[$i],7,$header[$i],1,0,'C',1);
$this->Ln();
//Restauración de colores y fuentes
$this->SetFillColor(224,235,255);
$this->SetTextColor(0);
$this->SetFont('');
//Datos
$fill=false;
while($row=mysql_fetch_assoc($res))
$data[]=array($row);
{
$this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
$this->Cell($w[2],6,$row[2],'LR',0,'L',$fill);
$this->Cell($w[3],6,$row[3],'LR',0,'L',$fill);
$this->Ln();
$fill=!$fill;
}
}
$this->Cell(array_sum($w),0,'','T');
}

$pdf=new PDF();
//Títulos de las columnas
$header=array('ID Empresa','Nombre','Direccion','Telefono');
$pdf->SetFont('Arial','',14);
$pdf->AddPage();
$pdf->FancyTable($header,$data);
$pdf->Output();
?>

Un Cordial saludo
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #6 (permalink)  
Antiguo 31/10/2010, 09:56
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ayuda con FPDF

amigo no estas pasando los datos por eso te queda en blanco function FancyTable($header,$data) esto es una funcion si tu no pasas el parametro $data no te puede mostrar datos si te fijas en el ejemplo que te puse la consulta no la llamo dentro de la funcion la hago afuera y luego los datos que obtengo los paso como parametro a la funcion en tu caso
Código PHP:
Ver original
  1. $sql='SELECT * FROM empresa';
  2. $res=mysql_query($sql,Conectar::con());
  3. while($row=mysql_fetch_assoc($res)){
  4.      $data[]=array($row);
  5. }
  6. $header=array('ID Empresa','Nombre','Direccion','Telefono');
  7. $pdf->SetFont('Arial','',14);
  8. $pdf->AddPage();
  9. $pdf->FancyTable($header,$data);
  10. $pdf->Output();
la funcion FancyTable estaria arriba en donde la tienes el array con los datos los obtienes fuera de esta, xq no te muestra nada xq la variable $res esta fuera de la funcion y esta no es global cuando entras al nivel de la funcion este no te toma esta has la prueba para que veas imprime $res fuera de la funcion y imprime $res dentro de la funcion para que veas que solo te lo imprimira una vez saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 31/10/2010, 12:46
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda con FPDF

NO, no amigo, muchas gracias por tu ayuda.

No sé como imprimir $res, lo hice con ECHO, pero leí en el foro que no se puede poner echo dentro de las funciones de fpdf, no imprime nada.

Hice lo de tu recomendación, puse la consulta fuera de la function, quedo así.
Código PHP:
Ver original
  1. $pdf=new PDF();
  2. //Títulos de las columnas
  3. $sql='SELECT * FROM empresa';
  4. $res=mysql_query($sql,Conectar::con());
  5.  
  6. while($row=mysql_fetch_assoc($res)){
  7.         $data[]=array($row);
  8. }
  9. //Títulos de las columnas
  10. $header=array('ID Empresa','Nombre','Direccion','Telefono');
  11. $pdf->SetFont('Arial','',14);
  12. $pdf->AddPage();
  13. $pdf->FancyTable($header,$data);
  14. $pdf->Output();
  15. ?>

En total quedo así.
Código PHP:
Ver original
  1. class PDF extends FPDF
  2. {
  3.  
  4.         function FancyTable($header,$data)
  5.         {
  6.                 //Colores, ancho de línea y fuente en negrita
  7.                 $this->SetFillColor(255,0,0);
  8.                 $this->SetTextColor(255);
  9.                 $this->SetDrawColor(128,0,0);
  10.                 $this->SetLineWidth(.3);
  11.                 $this->SetFont('','B');
  12.                 //Cabecera
  13.                 $w=array(40,35,40,45);
  14.                 for($i=0;$i<count($header);$i++)
  15.                         $this->Cell($w[$i],7,$header[$i],1,0,'C',1);
  16.                         $this->Ln();
  17.                         //Restauración de colores y fuentes
  18.                         $this->SetFillColor(224,235,255);
  19.                         $this->SetTextColor(0);
  20.                         $this->SetFont('');
  21.                         //Datos
  22.                         $fill=false;
  23.                        
  24.                         $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
  25.                         $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
  26.                         $this->Cell($w[2],6,$row[2],'LR',0,'L',$fill);
  27.                         $this->Cell($w[3],6,$row[3],'LR',0,'L',$fill);
  28.                         $this->Ln();
  29.                         $fill=!$fill;
  30.         }
  31. }
  32.                 $this->Cell(array_sum($w),0,'','T');
  33. $pdf=new PDF();
  34.  
  35. $sql='SELECT * FROM empresa';
  36. $res=mysql_query($sql,Conectar::con());
  37.  
  38. while($row=mysql_fetch_assoc($res)){
  39.         $data[]=array($row);
  40. }
  41. //Títulos de las columnas
  42. $header=array('ID Empresa','Nombre','Direccion','Telefono');
  43. $pdf->SetFont('Arial','',14);
  44. $pdf->AddPage();
  45. $pdf->FancyTable($header,$data);
  46. $pdf->Output();
  47. ?>
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #8 (permalink)  
Antiguo 31/10/2010, 13:14
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ayuda con FPDF

prueba esto
Código PHP:
Ver original
  1. <?php
  2. function FancyTable($header,$data)
  3.     {      
  4.         //Colores, ancho de línea y fuente en negrita
  5.         $this->SetFillColor(255);
  6.         $this->SetTextColor(0);
  7.         $this->SetDrawColor(0);
  8.         $this->SetLineWidth(.3);
  9.         $this->SetFont('','B');
  10.         //Cabecera
  11.         $w=array(22,80,10,10,10,10,60);
  12.         for($i=0;$i<count($header);$i++)
  13.         $this->Cell($w[$i],7,$header[$i],1,0,'C',1);
  14.         $this->Ln();
  15.         //Restauración de colores y fuentes
  16.         $this->SetFillColor(255);
  17.         $this->SetTextColor(0);
  18.         $this->SetFont('');
  19.         //Datos
  20.         $fill=false;               
  21.         foreach($data as $row)
  22.         {          
  23.             $this->setFont('Arial','',7);
  24.             $this->Cell($w[0],6,$row['datomostrar'],'LR',0,'L',$fill);#aca colocas los campos que vas a mostrar
  25.             $this->Cell($w[1],6,$row['datomostrar2'],'LR',0,'L',$fill);        
  26.             $this->Ln();
  27.             $fill=!$fill;
  28.         }
  29.         $this->Cell(array_sum($w),0,'','T');
  30.     }
  31. $sql='SELECT * FROM empresa';
  32. $res=mysql_query($sql,Conectar::con());
  33. while($row=mysql_fetch_assoc($res)){
  34.         $data[]=array_merge($row);
  35. }
  36. //Títulos de las columnas
  37. $header=array('ID Empresa','Nombre','Direccion','Telefono');
  38. $pdf->SetFont('Arial','',14);
  39. $pdf->AddPage();
  40. $pdf->FancyTable($header,$data);
  41. $pdf->Output();
  42. ?>
ojo no coloque los includes ni inicie la clase solo te hice la funcion y la consulta, y tu debes colocar los campos que quieres mostrar y el tamaño ya que te coloque una que yo tenia ya
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #9 (permalink)  
Antiguo 31/10/2010, 15:32
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda con FPDF

Gracias Carlos.

Nunca antes me había costado tanto hacer algo, y la verdad te agradezco un montón, y lamento decirte que no funcionó. sigue saliendo la página en blanco, y no encuentro que haya algún error, que es lo que comúnmente sucede eso cuando lo hay, tiene todas los punto y coma finales, esta requerida la clase fpdf, y el include de conexión, como así inicializada la clase. NO ENTIENDO.

Mil Gracias por tu tiempo.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #10 (permalink)  
Antiguo 31/10/2010, 15:52
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda con FPDF

Estimado, ya casi estamos listo, ahora por lo menos me imprime la tabla con sus cabeceras o títulos de columnas, per vacia, todavía no me entrega los datos, pero ya descubriré el porqué.
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #11 (permalink)  
Antiguo 31/10/2010, 17:48
 
Fecha de Ingreso: octubre-2006
Ubicación: Valparaiso Chile
Mensajes: 228
Antigüedad: 18 años
Puntos: 0
Respuesta: Ayuda con FPDF

Carlos, Quiero agradecer enormemente tu ayuda, sin ella me hubiera sido muy difícil poder lograr el objetivo, el cual por fin se logro, y pude incluir un Logo, un Encabezado y un Footer a todo el listado, a la vez que tuve que poner en estilo apaisada la pagina, dejo el código completo, por si a otra persona le pueda servir, y no tenga que sufrir tanto como lo hice yo.

Código PHP:
Ver original
  1. <?php
  2. require('../clases/fpdf.class.php');
  3. include('../clases/conexion.class.php');
  4.  
  5. define('FPDF_FONTPATH','../font/');
  6.  
  7. global $res;
  8.  
  9. class PDF extends FPDF
  10. {
  11.  
  12.         //Cabecera de página
  13.         function Header()
  14.         {
  15.                 //Logo
  16.                 $this->Image('../images/logo.png',10,8,33);
  17.                 //Arial bold 15
  18.                 $this->SetFont('Times','B',25);
  19.                 //Movernos a la derecha
  20.                 $this->Cell(50);
  21.                 //Título
  22.                 $this->Cell(100,10,'Listado General de Empresas',0,0,'C');
  23.                 //Salto de línea
  24.                 $this->Ln(20);
  25.         }
  26.         //Pie de página
  27.         function Footer()
  28.         {
  29.                 //Posición: a 1,5 cm del final
  30.                 $this->SetY(-15);
  31.                 //Arial italic 8
  32.                 $this->SetFont('Arial','I',8);
  33.                 //Número de página
  34.                 $this->Cell(0,10,'Pag. '.$this->PageNo().'/{nb}',0,0,'C');
  35.         }
  36.         //Tabla coloreada
  37.         function FancyTable($header,$data)
  38.         {
  39.                 //Colores, ancho de línea y fuente en negrita
  40.                 $this->SetFillColor(166,166,166);
  41.                 $this->SetTextColor(0);
  42.                 $this->SetDrawColor(128,0,0);
  43.                 $this->SetLineWidth(.3);
  44.                 $this->SetFont('','B');
  45.                 //Cabecera
  46.                 $w=array(20,100,120,35);
  47.                 for($i=0;$i<count($header);$i++)
  48.                         $this->Cell($w[$i],7,$header[$i],1,0,'C',1);
  49.                         $this->Ln();
  50.                         //Restauración de colores y fuentes
  51.                         $this->SetFillColor(208,208,208);
  52.                         $this->SetTextColor(0);
  53.                         $this->SetFont('');
  54.                         //Datos
  55.                         $fill=false;
  56.  
  57.  
  58.                         foreach($data as $row)
  59.                         {
  60.                                 $this->Cell($w[0],6,$row['idemp'],'LR',0,'L',$fill);
  61.                                 $this->Cell($w[1],6,$row['nombre'],'LR',0,'L',$fill);
  62.                                 $this->Cell($w[2],6,$row['direccion'],'LR',0,'L',$fill);
  63.                                 $this->Cell($w[3],6,$row['telefono'],'LR',0,'R',$fill);
  64.                                 $this->Ln();
  65.                                 $fill=!$fill;
  66.                         }
  67.                         $this->Cell(array_sum($w),0,'','T');
  68.         }
  69. }
  70. $sql='SELECT * FROM empresa';
  71. $res=mysql_query($sql,Conectar::con());
  72. while($row=mysql_fetch_assoc($res))
  73. {
  74.         $data[]=array_merge($row);
  75. }
  76.  
  77.         $pdf=new PDF();
  78.         // Titulo de las Columnas
  79.         $header=array('ID', 'Nombre', 'Dirección', 'Teléfono');
  80.         //Carga de datos
  81.         $pdf->AliasNbPages();
  82.          $pdf->SetFont('Times','',16);
  83.          $pdf->AddPage('L');
  84.         $pdf->FancyTable($header,$data);
  85.         $pdf->Output();
  86. ?>

Un Cordial Saludo
Desde Valparaíso - Chile
__________________
Un Cordial Saludo
Claudio González Soto
Negocios Online
http;//www.servpcweb.com
  #12 (permalink)  
Antiguo 31/10/2010, 19:51
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años, 7 meses
Puntos: 461
Respuesta: Ayuda con FPDF

exelente que hallas resuelto tu problema y yo se lo que es darse con algo que uno esta comenzando a conocer a mi me tomo un poco tambien adaptarme a esta libreria pero veras que tiene sus bondades saludos y para eso estamos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: fpdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:19.