Foros del Web » Programando para Internet » PHP »

Duda con FPDF

Estas en el tema de Duda con FPDF en el foro de PHP en Foros del Web. Buenas !! Estoy Generando PDF's desde php con esta libreria, y al crear en el documento una Fancy Table , me ha surgido un problema. ...
  #1 (permalink)  
Antiguo 28/01/2009, 01:32
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Duda con FPDF [resuelto:Tabla con Intros en celdas]

Buenas !!

Estoy Generando PDF's desde php con esta libreria, y al crear en el documento una Fancy Table , me ha surgido un problema.

Cuando El contenido de la celda es muy grande, en vez de hacer un salto de linea en la misma celda, ace overflow a la siguiente celda, es decir, se qda todo el texto en solo una linea.

Hay Alguna forma de que haga automaticamente este salto de linea dentro de la celda en cuestion ?

Código PHP:
        foreach($data as $row)
        {
            
$subtotal_item $row[1]*$row[2] ;
            
$this->Cell($w[0],6,$row[0],'LR',0,'L',0);
            
$this->Cell($w[1],6,$row[1],'LR',0,'R',0);
            
$this->Cell($w[2],6,mostrar_numero(number_format($row[2],2)),'LR',0,'R',0);
            
$this->Cell($w[3],6,mostrar_numero(number_format($subtotal_item,2)),'LR',0,'R',0);
            
$this->Ln();
            
$fill=!$fill;
            
$totalEjecucion $totalEjecucion $subtotal_item ;
        } 
__________________
» Presupuesto Pagina Web

Última edición por miSko; 29/01/2009 a las 02:05
  #2 (permalink)  
Antiguo 28/01/2009, 02:30
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: Duda con FPDF

Usa MultiCell en lugar de Cell.
  #3 (permalink)  
Antiguo 28/01/2009, 02:33
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Respuesta: Duda con FPDF

Multicell provoca saltos de linea por lo que la siguiente celda de la tabla sale descolocada y eso no me vale
__________________
» Presupuesto Pagina Web
  #4 (permalink)  
Antiguo 28/01/2009, 02:43
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 6 meses
Puntos: 48
Respuesta: Duda con FPDF

Cita:
Iniciado por miSko Ver Mensaje
Multicell provoca saltos de linea por lo que la siguiente celda de la tabla sale descolocada y eso no me vale
¿Pero no decias que lo que querias eran los saltos de linea?
Cita:
Hay Alguna forma de que haga automaticamente este salto de linea dentro de la celda en cuestion ?
Supongo que a lo que te refieres realmente es que ejecuta un Ln despues del MultiCell. Eso lo solucionas posicionando a mano las celdas con SetXY. Tienes que llevar tanto la X como la Y, el Ln no te sirve porque toma el valor de salto de la ultima celda, tienes que ir memorizando la Y maxima de las celdas de la fila. Y tambien tendras problemas con los bordes.
  #5 (permalink)  
Antiguo 29/01/2009, 02:04
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 18 años, 7 meses
Puntos: 84
Respuesta: Duda con FPDF

Buenas de Nuevo,

Me he hecho esta funcioncita q de momento me saka del apuro, La pongo aqui por si a alguien le hace falta algo parecido, q la modifique a su gusto :P.

Habria que llamar a la funcion por cada fila d la tabla aunq podreis haceros una funcion para enviarle la tabla entera y yasta ;)

Igual es un Poco Caotica xD
A la funcion se le pasa un array de datos compuesto por otro array cuyos campos son texto y size.

Por Ejemplo
Código PHP:

$datos
[0]['texto'] = 'Celda 1 con tamaño 90' ;
$datos[0]['size'] = 90 ;
$datos[1]['texto'] = 'Celda 2 con tamaño 40' ;
$datos[1]['size'] = 40 
Y se le pasa un True | False en funcion si le queremos poner borde a las celdas.

D todas formas insisto, esto me vale a mi, pero a quien lo necesite mas modificado q se lo cambie :P

Código PHP:
function dibujar_fila($array_datos,$poner_borde)
    {
        
$posX $this->GetX() ;
        
$posY $this->GetY() ;
        
$posicionXactual = (integer)$posX ;
        
$numeroLineas ;
        
$sumSize ;        
        foreach(
$array_datos as $dato)
        {
            
$sumSize += $dato['size'] ;
            
$text_size = (integer)$this->GetStringWidth($dato['texto'])+1.5 ;
            
$cell_size = (integer)$dato['size'] ;
            
$numLineas number_format( ($text_size/$cell_size) , 2) ;
            
            
$tmp explode('.',$numLineas) ;

            if (
$tmp[1] > 0)
                
$tmp[0]++ ;
                        
            if (
$tmp[0] > $numeroLineas)
                
$numeroLineas $tmp[0];
        }
        
        foreach(
$array_datos as $dato)
        {
            
$this->SetY($posY) ;
            
$this->SetX($posicionXactual) ;
            if (
$poner_borde == true)
                
$this->MultiCell($dato['size'],6,$dato['texto'],'LR',1,'L') ;
            else
                
$this->MultiCell($dato['size'],6,$dato['texto'],0,1,'L') ;
                
            
$posicionXactual $posicionXactual $dato['size'] ;
        }
        
        if (
$numeroLineas 10)
            
$numeroLineas++ ;
        

        
$a ;
        foreach(
$array_datos as $dato)
        {
            
$sizes[$a] = $dato['size'] ;
            
$a++ ;
        }
        
        if(
$poner_borde == true)
        {
            
$this->SetY($posY) ;
            
            if (
$numeroLineas == 1)
            {
                
$this->Cell($sumSize,6,'',1,1) ;
            }
            else
            {
                if (
$numeroLineas == 2)
                {
                    
$this->Cell($sumSize,6,'','T',1) ;
                    
$this->Cell($sumSize,6,'','B',1) ;
                }
                else
                {
                
                    
$this->Cell($sumSize,6,'','T',1) ;
                    for(
$i=$i $numeroLineas+$i++)
                    {
                        for (
$a=$a count($sizes)-1$a++)
                                
$this->Cell($sizes[$a],6,'','LR',0) ;                            

                        
$this->Cell($sizes[count($sizes)-1],6,'','LR',1) ;                            
                    }
                        for (
$a=$a count($sizes)-1$a++)
                                
$this->Cell($sizes[$a],6,'','LR',0) ;                            

                        
$this->Cell($sizes[count($sizes)-1],6,'','LR',1) ;    
                }
            }
        }
        else
        {
            
$this->SetY($posY) ;
            for(
$i=$i $numeroLineas $i++)
                
$this->Cell(0,6,'',0,1) ;
        }
        
        return 
$numeroLineas ;
    } 
__________________
» Presupuesto Pagina Web
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 16:45.