Foros del Web » Programando para Internet » PHP »

publicar datos en pdf

Estas en el tema de publicar datos en pdf en el foro de PHP en Foros del Web. Bueno, ahora lo que quiero es convertir esos datos a un pdf que se pueda imprimir facilmente y enviar por correo. para eso, estuve leyendo ...
  #1 (permalink)  
Antiguo 13/12/2008, 20:12
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
publicar datos en pdf

Bueno, ahora lo que quiero es convertir esos datos a un pdf que se pueda imprimir facilmente y enviar por correo.

para eso, estuve leyendo y encontre la clase fpdf

y la use asi pero no me dio

Código:
’<?php 
//clase phpPDF
require('fpdf153/fpdf.php')

//Conexion a base de datos
$mysql_id = mysql_connect('localhost', 'root', 'pss');
mysql_select_db('extractos', $mysql_id);

//recibe las variables
$placa=$_GET['placa'];
$empresa=$_GET['empresa'];

//consultas sql
$sql="SELECT * FROM viaje WHERE vehiculo = '".$placa."'";
$sql2="SELECT * FROM contratante WHERE cedula_nit = '".$empresa."'";
$sql3="SELECT * FROM vehiculo WHERE placa = '".$placa."'";

//ejecuta las consultas
$resultado = mysql_query($sql) or die( mysql_error());
$resultado2 = mysql_query($sql2) or die( mysql_error());
$resultado3 = mysql_query($sql3) or die ( mysql_error());


//organiza los resultados
while( $row = mysql_fetch_assoc($resultado)) {
       $row2 = mysql_fetch_assoc($resultado2);
       $row3 = mysql_fetch_assoc($resultado3);
  
//cambia el formato de la fecha
$fecha_salida = strtotime($row['fecha_salida']);
$feha_regreso = strtotime($row['fecha_regreso']);
 
//muestra los resultados
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont(’Arial’,'B’,16);
$pdf->Cell(40,10,’

echo '<table>';
echo   '<tr><td>' .$row['origen']. '</td></tr>';
echo   '<tr><td>' .$row['destino']. '</td></tr>';
echo   '<tr><td>' .date("d-m-Y", $fecha_salida). '</td></tr>';
echo   '<tr><td>' .date("d-m-Y", $fecha_regreso). '</td></tr>';
echo   '<tr><td>' .$row2['Empresa']. '</td></tr>';   
echo   '<tr><td>' .$row3['placa']. '</td></tr>';
echo   '<tr><td>' .$row3['modelo']. '</td></tr>';
echo   '<tr><td>' .$row3['tarjeta_operacion']. '</td></tr>';
echo   '<tr><td>' .$row3['marca']. '</td></tr>';
echo   '<tr><td>' .$row3['no_interno']. '</td></tr>';
echo   '<tr><td>' .$row3['vencimiento_t_o']. '</td></tr>';

’);
$pdf->Output();
}

?>
__________________
Say no more.......
  #2 (permalink)  
Antiguo 13/12/2008, 20:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: publicar datos en pdf

Pues claro que no te va a dar, tienes que usar los métodos de la clase FPDF que estas usando, con echo no los asignas al PDF, solo lo estas imprimiendo.

Saludos.
  #3 (permalink)  
Antiguo 13/12/2008, 21:21
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
Respuesta: publicar datos en pdf

Bueno he leido un poco pero cuando intento generarlo no me da,

lo tengo asi

Código:
<?php 
//clase phpPDF
require('fpdf153/fpdf.php');

//Conexion a base de datos
$mysql_id = mysql_connect('localhost', 'root', 'buckdich');
mysql_select_db('extractos', $mysql_id);

//recibe las variables
$placa=$_GET['placa'];
$empresa=$_GET['empresa'];

//consultas sql
$sql="SELECT * FROM viaje WHERE vehiculo = '".$placa."'";
$sql2="SELECT * FROM contratante WHERE cedula_nit = '".$empresa."'";
$sql3="SELECT * FROM vehiculo WHERE placa = '".$placa."'";

//ejecuta las consultas
$resultado = mysql_query($sql) or die( mysql_error());
$resultado2 = mysql_query($sql2) or die( mysql_error());
$resultado3 = mysql_query($sql3) or die ( mysql_error());


//organiza los resultados
while( $row = mysql_fetch_assoc($resultado)) {
       $row2 = mysql_fetch_assoc($resultado2);
       $row3 = mysql_fetch_assoc($resultado3);
  
//cambia el formato de la fecha
$fecha_salida = strtotime($row['fecha_salida']);
$feha_regreso = strtotime($row['fecha_regreso']);
 
//Crea el PDF
$pdf=new FPDF('P','cm','Letter');
$pdf->AddPage();
$pdf->SetFont(’Arial’,'B’,12);
$pdf->Cell(40,10,".$row['origen']. ");
}
$pdf->Output("extracto.pdf","I");
?>
__________________
Say no more.......
  #4 (permalink)  
Antiguo 14/12/2008, 00:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: publicar datos en pdf

Pues obviamente no te va a dar, si creas y borras el PDF en cada vuelta del while, te recomiendo leas un poco de programación básica para que aprendas y entiendas como es la logica de un programa.

Saludos.
  #5 (permalink)  
Antiguo 14/12/2008, 06:09
 
Fecha de Ingreso: diciembre-2008
Mensajes: 30
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: publicar datos en pdf

Bueno yo tengo un problema similar pero me he kedado un poco atascado y no veo la solución. Tengo 2 archivos uno llamado mysql_table.php que es así:

<?php
require('fpdf/fpdf.php');

class PDF_MySQL_Table extends FPDF
{
var $ProcessingTable=false;
var $aCols=array();
var $TableX;
var $HeaderColor;
var $RowColors;
var $ColorIndex;

function Header()
{
//Print the table header if necessary
if($this->ProcessingTable)
$this->TableHeader();
}

function TableHeader()
{
$this->SetFont('Arial','B',12);
$this->SetX($this->TableX);
$fill=!empty($this->HeaderColor);
if($fill)
$this->SetFillColor($this->HeaderColor[0],$this->HeaderColor[1],$this->HeaderColor[2]);
foreach($this->aCols as $col)
$this->Cell($col['w'],6,$col['c'],1,0,'C',$fill);
$this->Ln();
}

function Row($data)
{
$this->SetX($this->TableX);
$ci=$this->ColorIndex;
$fill=!empty($this->RowColors[$ci]);
if($fill)
$this->SetFillColor($this->RowColors[$ci][0],$this->RowColors[$ci][1],$this->RowColors[$ci][2]);
foreach($this->aCols as $col)
$this->Cell($col['w'],5,$data[$col['f']],1,0,$col['a'],$fill);
$this->Ln();
$this->ColorIndex=1-$ci;
}

function CalcWidths($width,$align)
{
//Compute the widths of the columns
$TableWidth=0;
foreach($this->aCols as $i=>$col)
{
$w=$col['w'];
if($w==-1)
$w=$width/count($this->aCols);
elseif(substr($w,-1)=='%')
$w=$w/100*$width;
$this->aCols[$i]['w']=$w;
$TableWidth+=$w;
}
//Compute the abscissa of the table
if($align=='C')
$this->TableX=max(($this->w-$TableWidth)/2,0);
elseif($align=='R')
$this->TableX=max($this->w-$this->rMargin-$TableWidth,0);
else
$this->TableX=$this->lMargin;
}

function AddCol($field=-1,$width=-1,$caption='',$align='L')
{
//Add a column to the table
if($field==-1)
$field=count($this->aCols);
$this->aCols[]=array('f'=>$field,'c'=>$caption,'w'=>$width,'a'=> $align);
}

function Table($query,$prop=array())
{
//Issue query
$res=mysql_query($query) or die('Error: '.mysql_error()."<BR>Query: $query");
//Add all columns if none was specified
if(count($this->aCols)==0)
{
$nb=mysql_num_fields($res);
for($i=0;$i<$nb;$i++)
$this->AddCol();
}
//Retrieve column names when not specified
foreach($this->aCols as $i=>$col)
{
if($col['c']=='')
{
if(is_string($col['f']))
$this->aCols[$i]['c']=ucfirst($col['f']);
else
$this->aCols[$i]['c']=ucfirst(mysql_field_name($res,$col['f']));
}
}
//Handle properties
if(!isset($prop['width']))
$prop['width']=0;
if($prop['width']==0)
$prop['width']=$this->w-$this->lMargin-$this->rMargin;
if(!isset($prop['align']))
$prop['align']='C';
if(!isset($prop['padding']))
$prop['padding']=$this->cMargin;
$cMargin=$this->cMargin;
$this->cMargin=$prop['padding'];
if(!isset($prop['HeaderColor']))
$prop['HeaderColor']=array();
$this->HeaderColor=$prop['HeaderColor'];
if(!isset($prop['color1']))
$prop['color1']=array();
if(!isset($prop['color2']))
$prop['color2']=array();
$this->RowColors=array($prop['color1'],$prop['color2']);
//Compute column widths
$this->CalcWidths($prop['width'],$prop['align']);
//Print header
$this->TableHeader();
//Print rows
$this->SetFont('Arial','',11);
$this->ColorIndex=0;
$this->ProcessingTable=true;
while($row=mysql_fetch_array($res))
$this->Row($row);
$this->ProcessingTable=false;
$this->cMargin=$cMargin;
$this->aCols=array();
}
}
?>

y el que me genera el pdf

<?php
define('FPDF_FONTPATH','fpdf/font/');
require('mysql_table.php');

class PDF extends PDF_MySQL_Table
{
function Header()
{
//Title
$this->SetFont('Arial','',18);
$this->Cell(0,6,'registros tramp',0,1,'C');
$this->Ln(10);
//Ensure table header is output
parent::Header();
}
}

//Connect to database
mysql_connect('localhost','root','catamaran');
mysql_select_db('tramp');

$pdf=new PDF();
$pdf->Open();
$pdf->AddPage();

//Second table: specify 3 columns
$pdf->AddCol('id',20,'','C');
$pdf->AddCol('Ttulo',40,'Ttulo');
$pdf->AddCol('Fecha',40,'Fecha','R');
$prop=array('HeaderColor'=>array(255,150,100),
'color1'=>array(210,245,255),
'color2'=>array(255,255,210),
'padding'=>2);
$pdf->Table('SELECT id, Título, Fecha from p2_lp order by id',$prop);
$pdf->Output();
?>

Pero me da el típico error fpdf de cuando as enviado datos incorrectamente:
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\PROYECTOS\Barcos\mysql_table.php:13 2) in C:\AppServ\www\PROYECTOS\Barcos\fpdf\fpdf.php on line 1017
FPDF error: Some data has already been output, can't send PDF file

El código lo he sacado de un script de ejemplo del site de fpdf pero no lo consigo hacer funcionar. Agradeceré alguna sugerència, grácias por adelantado.
  #6 (permalink)  
Antiguo 14/12/2008, 12:15
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
Respuesta: publicar datos en pdf

Cita:
Iniciado por GatorV Ver Mensaje
Pues obviamente no te va a dar, si creas y borras el PDF en cada vuelta del while, te recomiendo leas un poco de programación básica para que aprendas y entiendas como es la logica de un programa.

Saludos.


creo que no entendi bien lo que me quieres decir, podrias expolicarme un poquito (claro si no es molestia)
__________________
Say no more.......
  #7 (permalink)  
Antiguo 14/12/2008, 12:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: publicar datos en pdf

Pues esque te tendría que dar unas clases de programación, ya que se nota que no tienes los conceptos básicos.

Tu problema si ves el bloque while() es un ciclo, se ejecuta por tantas veces que la condicion se de y sea true. Si tu dentro del bloque while creas la instancia del PDF, obviamente vas a ir borrando los datos anteriores ya que destruyes y creas la instancia.

Saludos.
  #8 (permalink)  
Antiguo 15/12/2008, 14:00
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
Respuesta: publicar datos en pdf

mmmm definitivamente no pude, me hice bolas tratando de lograrlo, el caso es que esta es la tabla como obtengo los resultados de la consulta, y esta es la que necesito generar en pdf pro no se como.

Código:
<?php 
$mysql_id = mysql_connect('localhost', 'root', 'buckdich');
mysql_select_db('extractos', $mysql_id);


$placa=$_GET['placa'];
$empresa=$_GET['empresa'];


$sql="SELECT * FROM viaje WHERE vehiculo = '".$placa."'";
$sql2="SELECT * FROM contratante WHERE cedula_nit = '".$empresa."'";

$sql3="SELECT * FROM vehiculo WHERE placa = '".$placa."'";


$resultado = mysql_query($sql) or die( mysql_error());
$resultado2 = mysql_query($sql2) or die( mysql_error());
$resultado3 = mysql_query($sql3) or die ( mysql_error());


echo '<table width="744,61" height="555,83">';
echo '<tr>
    <td colspan="6" height="248">&nbsp;</td>
  </tr>';
while( $row = mysql_fetch_assoc($resultado)) {
       $row2 = mysql_fetch_assoc($resultado2);
       $row3 = mysql_fetch_assoc($resultado3);
  
$fecha_salida = strtotime($row['fecha_salida']);
$feha_regreso = strtotime($row['fecha_regreso']);
 

echo   '<tr>
    <td width="74" height="17,7">&nbsp;</td>
    <td width="193">&nbsp;</td>
    <td colspan="3">' .$row['origen'].'</td>
    <td width="6">&nbsp;</td>
  </tr>';
//echo   '<tr><td>' .$row['origen']. '</td></tr>';
echo ' <tr>
    <td height="17,69">&nbsp;</td>
    <td>&nbsp;</td>
    <td colspan="3">'.$row['destino'].'</td>
    <td>&nbsp;</td>
  </tr>';
//echo   '<tr><td>' .$row['destino']. '</td></tr>';
echo '<tr>
    <td height="17,91">&nbsp;</td>
    <td>&nbsp;</td>
    <td width="119">'.date("d-m-Y", $fecha_salida).'</td>
    <td width="134">&nbsp;</td>
    <td width="178">'.date("d-m-Y", $fecha_regreso).'</td>
    <td>&nbsp;</td>
  </tr>';
//echo   '<tr><td>' .date("d-m-Y", $fecha_salida). '</td></tr>';
//echo   '<tr><td>' .date("d-m-Y", $fecha_regreso). '</td></tr>';
echo '<tr>
    <td height="17,91">&nbsp;</td>
    <td>&nbsp;</td>
    <td colspan="3">'.$row2['Empresa'].'</td>
    <td>&nbsp;</td>
  </tr>';
//echo   '<tr><td>' .$row2['Empresa']. '</td></tr>';
//objeto del contrato y observaciones

echo ' <tr>
    <td>&nbsp;</td>
    <td colspan="4">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td colspan="4">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>';  
echo '<tr>
    <td>&nbsp;</td>
    <td colspan="2"><table width="316" >
      <tr>
        <td>&nbsp;</td>
        <td>'.$row3['placa'].'</td>
      </tr>
      <tr>
        <td>'.$row3['modelo']. '</td>
        <td>&nbsp;</td>
      </tr>
      <tr>
        <td>'.$row3['tarjeta_operacion'].'</td>
        <td>&nbsp;</td>
      </tr>
    </table></td>
    <td colspan="2"><table width="317" >
      <tr>
        <td>&nbsp;</td>
        <td>' .$row3['marca'].'</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>'.$row3['no_interno'].'</td>
      </tr>
      <tr>
        <td>&nbsp;</td>
        <td>'.$row3['vencimiento_t_o'].'</td>
      </tr>
    </table></td>
    <td>&nbsp;</td>
  </tr>' ; 
/*
echo   '<tr><td>' .$row3['placa']. '</td></tr>';
echo   '<tr><td>' .$row3['modelo']. '</td></tr>';
echo   '<tr><td>' .$row3['tarjeta_operacion']. '</td></tr>';
echo   '<tr><td>' .$row3['marca']. '</td></tr>';
echo   '<tr><td>' .$row3['no_interno']. '</td></tr>';
echo   '<tr><td>' .$row3['vencimiento_t_o']. '</td></tr>';
*/
}

?>
__________________
Say no more.......
  #9 (permalink)  
Antiguo 15/12/2008, 15:41
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
Respuesta: publicar datos en pdf

bueno, como dicen que el que percebera alcanza, ya lo estoy logrando pero el cuento ahora es que no logro cuadrar bien las medidas, o sea lo que pasa es que debo lograr que las celdas queden ubicadas en una posicion especifica pero la verdad no he encontrado una buena guia que me diga como corresponde la especificacion de las medidas, tengo esto

Código:
<?php


//$pdf->Cell(0,);
$pdf->Cell(6,6,$row['origen']);
$pdf->Cell(5,8,$row['destino']);
}
$pdf->Output();
?>
lo que no entiendo es el primer numero corresponde a ubicacion vertical, horizontal?
__________________
Say no more.......
  #10 (permalink)  
Antiguo 15/12/2008, 15:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: publicar datos en pdf

Lee la referencia, para eso esta y para eso te deje el link, para que mismo puedas lograrlo.

Saludos.
  #11 (permalink)  
Antiguo 15/12/2008, 15:55
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
Respuesta: publicar datos en pdf

GatorV he leido la referencia y en varias partes y no he entendido, si pregunto es porque no entiendo
__________________
Say no more.......
  #12 (permalink)  
Antiguo 15/12/2008, 16:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: publicar datos en pdf

Si ves el Manual claramente explica para que sirven los dos parametros de Cell(width, height).

Saludos.
  #13 (permalink)  
Antiguo 15/12/2008, 17:16
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.423
Antigüedad: 22 años, 10 meses
Puntos: 20
Respuesta: publicar datos en pdf

bueno, ya he leido nuevamente el manual y he comprendido bien lo del width y height, pero lo que no logro hacer es que las celdas queden ubicadas en un lugar especifico de la hoja, intente con SetX y SetY pero no me dio, lo hice asi

Código:
$pdf->SetX(5);
$pdf->SetY(7);
$pdf->Cell(0,0,$row['origen']);
y tambien lo probe asi


Código:
$pdf->SetX(float,5);
$pdf->SetY(float,7);
$pdf->Cell(0,0,$row['origen']);
lo que quiero es que esa celda quede a 5 cm de la margen izquierda y a 7 cm de la superior
__________________
Say no more.......
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 22:55.