Foros del Web » Programando para Internet » PHP »

Problema con Multicell en fpdf en php

Estas en el tema de Problema con Multicell en fpdf en php en el foro de PHP en Foros del Web. Hola amigos, saludos! Tengo el siguiente problema. Estoy generando un reporte de un sistema de inventario que desarrollo. El cual debe generar todos los datos ...
  #1 (permalink)  
Antiguo 24/11/2009, 09:17
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Problema con Multicell en fpdf en php

Hola amigos, saludos!

Tengo el siguiente problema.

Estoy generando un reporte de un sistema de inventario que desarrollo.

El cual debe generar todos los datos adjuntos de cada producto en ese archivo pdf creado con fpdf.

El detalle esta en que tengo un campo llamado descripcion en mi base de datos para especificar la descripcion del producto. Esa descripcion utiliza muchos caracteres. y cuando le hago el llamado en fpdf y utilizo CELL el campo se desborda, es decir, se sobrepone de los demas campos que siguen.

Revise en la web y hay varias personas con el mismo problema y me dicen que utilize MULTICELL pero el problema de MULTICELL es que da un salto de linea despues de mostrar el dato!

Es decir, baja de line y el dato que debe mostrar al lado lo baja!.

Ejemplo, quiero que haga esto


Código PHP:
nombre        descripcion        precio 
__________________________________

memoria    memoria ram               128
$
              
de 512 Mb de
              de tipo DDRR2
             Y es marca
             xxxxxxx
.
pendrive   pendrive de 2 GB           50$
             
de marca kingotns 

y con el uso de CELL hace esto(se sobrepone al campo siguiente):


Código PHP:
nombre        descripcion        precio 
_____________________________________________________________

memoria    memoria ram  de 512128$Mb de tipo DDRR2 y es mnarca xxx
pendrive    pendrive de 2GB de c50$olor negor marca kingotndfefefefefe 


y con el uso de multicell hace esto:




Código PHP:
nombre        descripcion        precio 
_________________________________________

memoria    memoria ram       
                  de 512 Mb de
                  de tipo DDRR2
                  Y es marca
                  xxxxxxx
.

128$

pendrive  pendrive de 2GB 
                de color negor 
                marca kingotndfe
                 fefefefe

50

__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04

Última edición por joelluis17; 24/11/2009 a las 09:31
  #2 (permalink)  
Antiguo 24/11/2009, 10:37
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 11 meses
Puntos: 7
Respuesta: Problema con Multicell en fpdf en php

Amigo lee este:

http://www.fpdf.org/en/script/script3.php
  #3 (permalink)  
Antiguo 24/11/2009, 14:14
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Problema con Multicell en fpdf en php

Gracias por responder hermano!

Ya revice ese post desde hace tiempo y en todos lados que ingreso me dan el mismo enlace!

En la web me e percatado que existen muchas personas con el mismo problema y no he visto a ninguno de ellos que lo aya solucionado.

Yo cree una manera muy tediosa de hacerlo, repito es tediosa pero a final realiza lo requerido.

Claro me gustaria saber la manera de como lo haria los creadores de FPDF ya que si son ellos los creadores deberian facilitar la informacion.

Solo veo que fcilitan el MULTICELL pero no dan ejemplos funcionales con valores reales sino que ponen un simple ejemplo que ni se ve el perfecto funcionamiento.


Lo que yo hice fue contar los caracteres de mis campos de la base de datos y segun el numero de ellos le ajusto el ancho al MULTICELL.

Repito no es la solucion pero e funiono

Ojala ayude a otras personas! y si alguien sabe algo mejor me gustaria lo compartiera!
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #4 (permalink)  
Antiguo 24/11/2009, 14:27
Avatar de Algadar  
Fecha de Ingreso: abril-2009
Mensajes: 115
Antigüedad: 15 años
Puntos: 1
De acuerdo Respuesta: Problema con Multicell en fpdf en php

ey! joelluis17

Estoy comenzando con eso del fdpf y quiero saber si me puedes ayudar.

necesito crear un reporte basico cuyos datos estan en una BD MySql lo estoy intentando con las funciones de tablas veo que tu lo haces con el CELL
me podrias decir como? .
agradecido de antemano.
  #5 (permalink)  
Antiguo 24/11/2009, 14:41
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Problema con Multicell en fpdf en php

Hola amigo!

1. Bajate la clase de FPDF desde aqui: http://www.fpdf.org/es/dl.php?v=16&f=zip
2. Lo descomprimes y le das el nombre de fpdf
3. Luego en la carpeta donde esta tu sistema o donde piensas utilizar la funcion guardas ese archivo (carpeta que acabas de descomprimir y tiene el nombre de fpdf).


Y ya lo tendras instalado para ser usado!

El fpdf tiene muchas ventajas y desventajas yo lo uso porque es facil y parendi con el, pero a medida que voy aprendiendo mas me doy cuenta que la comunidad o creadores del mismo no tienen suficiente informacion para realizar buenos reportes!

Practicamente esta muy abandonada la informacion del mismo.

Pero para generar reportes funciona bien (aunque repito ya es la 3ra vez que presento problemas y nadie nadieeee me a podido ayudar, y asi hay muchas personas mas!)

Para generar el reporte con los datos de tu Base de Datos es muy parecedio a com trabajas con tus sentencias en PHP, el SELECT tiene la misma seintaxis y todo!

Te dejare un ejemplo!



Código PHP:
<?php
require('fpdf.php');

class 
PDF extends FPDF
{
    
//Cabecera de página
    
function Header()
    {
        
$this->Image('images/barra.jpg',50,10,180);
        
$this->SetFont('Arial','B',6);
        
$this->Cell(0,20,"Fecha de Impresion: ".date('d - m - Y')."  ",'',1,'R');
            
$this->Ln(2);
    }
    
//Pie de página
    
function Footer()
    {
        
//Posición: a 2 cm del final
        
$this->SetY(-20);
         
//Arial italic 8
        
$this->SetFont('Arial','',8);
        
$this->Cell(300,4,'Firma:__________________________                                Responsable:__________________________','',1,'C');
         
//Arial italic 8
        
$this->SetFont('Arial','BI',8);
        
$this->Cell(250,2,'GENERAL MOTORS VENEZOLANA C.A','',1,'L');
        
$this->Cell(250,5,'Sistema para la Gestion de CNP','',1,'L');
        
//Arial italic 8
        
$this->SetFont('Arial','BI',8);
        
//Número de página
        
$this->Cell(195,4,'Reporte de Materiales','T',0,'L');
        
$this->Cell(0,4,'Pagina '.$this->PageNo().'/TPAG','T',1,'R');
        
        

    }
}
//Fin de la clase


//Creación del objeto de la clase heredada
$pdf = new PDF('L','mm','LETTER');
$pdf->AliasNbPages('TPAG');
$pdf->SetTopMargin(20);
$pdf->SetLeftMargin(5);
$pdf->SetRightMargin(5);
$pdf->AddPage();



//Aqui te conectas a la base de datos, esta pagina no te la doy porque ya la debes tener si trabajas con php y mysql

include("../conexion.php");
$link=Conectarse();


//Aqui haces el llamado a la trabla de tu base de datos


    
$leer="SELECT  * FROM materiales order by id ASC";
    
$basededatos=mysql_db_query("singes","$leer");


$pdf->SetFont('Arial','B',7);
$pdf->Cell(230,5,"REPORTE DE MATERIALES",'',1,'C');




$pdf->SetFont('Arial','B',6);
$pdf->Cell(25,6,'Numero de Partes','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(35,6,'Nombre','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(140,6,'Especificaciones','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(25,6,'Unidad/Medida','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(25,6,'Codigo Arancelario','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(15,6,'Status','TRLB',1,'C');






while(
$fila=mysql_fetch_array($basededatos))
    {
    
    
// Aqui empiezas a mostrar los datos

$pdf->SetFont('Arial','',6);    
$pdf->Cell(25,5,$fila[numero],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);    
$pdf->Cell(35,5,$fila[nombre],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);
$especificaciones=substr($fila[especificaciones],0,140);
$pdf->Cell(140,5,$especificaciones.'...','TRLB',0,'Q');
$pdf->SetFont('Arial','',6);    
$pdf->Cell(25,5,$fila[unidad],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);
$pdf->Cell(25,5,$fila[codigo_arancelario],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);
if(
$fila[statu]=='1')
{
$statu='Activo';
}
else
{
$statu='Inactivo';
}
$pdf->Cell(15,5,$statu,'TRLB',1,'Q');

}


$pdf->Ln(8);
$pdf->OutPut("Reporte de Materiales.pdf",'D');

?>
Lo guardas con el nombre que quieras; ejemplo: reporte.php

Ahora solo le hacer link (enlace) desde tu sistema y ya!

Ejemplo:

Puede hacer un enlace en tu menu de tu pagina o sistema:

fpdf/eporte.php

Recuerda que los reportes los colocaras en la carpeta fpdf por ñlo que al hacer el llamado solo debes agreagar el fpdf/ en los enlaces

Y al hacer clic sobre el lo descargara y ya!



Espero te sirva de ayuda!

Te estoy dando un ejemplo funcional y real de un reporte, ya que es una de mis sistemas (es decir no tiene errores porque lo uso actualmente)
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #6 (permalink)  
Antiguo 24/11/2009, 14:47
Avatar de Algadar  
Fecha de Ingreso: abril-2009
Mensajes: 115
Antigüedad: 15 años
Puntos: 1
Muchisimas gracias lo voy a probar.

hola, joelluis17

Fino
ahora tengo otra duda los pie de paginas donde me dice la cantidad de paginas me sale
"Page 1/{nb}"

Última edición por GatorV; 24/11/2009 a las 16:18
  #7 (permalink)  
Antiguo 25/11/2009, 06:21
Avatar de Algadar  
Fecha de Ingreso: abril-2009
Mensajes: 115
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con Multicell en fpdf en php

Cita:
Iniciado por joelluis17 Ver Mensaje
Hola amigo!

1. Bajate la clase de FPDF desde aqui: http://www.fpdf.org/es/dl.php?v=16&f=zip
2. Lo descomprimes y le das el nombre de fpdf
3. Luego en la carpeta donde esta tu sistema o donde piensas utilizar la funcion guardas ese archivo (carpeta que acabas de descomprimir y tiene el nombre de fpdf).


Y ya lo tendras instalado para ser usado!

El fpdf tiene muchas ventajas y desventajas yo lo uso porque es facil y parendi con el, pero a medida que voy aprendiendo mas me doy cuenta que la comunidad o creadores del mismo no tienen suficiente informacion para realizar buenos reportes!

Practicamente esta muy abandonada la informacion del mismo.

Pero para generar reportes funciona bien (aunque repito ya es la 3ra vez que presento problemas y nadie nadieeee me a podido ayudar, y asi hay muchas personas mas!)

Para generar el reporte con los datos de tu Base de Datos es muy parecedio a com trabajas con tus sentencias en PHP, el SELECT tiene la misma seintaxis y todo!

Te dejare un ejemplo!



Código PHP:
<?php
require('fpdf.php');

class 
PDF extends FPDF
{
    
//Cabecera de página
    
function Header()
    {
        
$this->Image('images/barra.jpg',50,10,180);
        
$this->SetFont('Arial','B',6);
        
$this->Cell(0,20,"Fecha de Impresion: ".date('d - m - Y')."  ",'',1,'R');
            
$this->Ln(2);
    }
    
//Pie de página
    
function Footer()
    {
        
//Posición: a 2 cm del final
        
$this->SetY(-20);
         
//Arial italic 8
        
$this->SetFont('Arial','',8);
        
$this->Cell(300,4,'Firma:__________________________                                Responsable:__________________________','',1,'C');
         
//Arial italic 8
        
$this->SetFont('Arial','BI',8);
        
$this->Cell(250,2,'GENERAL MOTORS VENEZOLANA C.A','',1,'L');
        
$this->Cell(250,5,'Sistema para la Gestion de CNP','',1,'L');
        
//Arial italic 8
        
$this->SetFont('Arial','BI',8);
        
//Número de página
        
$this->Cell(195,4,'Reporte de Materiales','T',0,'L');
        
$this->Cell(0,4,'Pagina '.$this->PageNo().'/TPAG','T',1,'R');
        
        

    }
}
//Fin de la clase


//Creación del objeto de la clase heredada
$pdf = new PDF('L','mm','LETTER');
$pdf->AliasNbPages('TPAG');
$pdf->SetTopMargin(20);
$pdf->SetLeftMargin(5);
$pdf->SetRightMargin(5);
$pdf->AddPage();



//Aqui te conectas a la base de datos, esta pagina no te la doy porque ya la debes tener si trabajas con php y mysql

include("../conexion.php");
$link=Conectarse();


//Aqui haces el llamado a la trabla de tu base de datos


    
$leer="SELECT  * FROM materiales order by id ASC";
    
$basededatos=mysql_db_query("singes","$leer");


$pdf->SetFont('Arial','B',7);
$pdf->Cell(230,5,"REPORTE DE MATERIALES",'',1,'C');




$pdf->SetFont('Arial','B',6);
$pdf->Cell(25,6,'Numero de Partes','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(35,6,'Nombre','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(140,6,'Especificaciones','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(25,6,'Unidad/Medida','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(25,6,'Codigo Arancelario','TRLB',0,'C');
$pdf->SetFont('Arial','B',6);
$pdf->Cell(15,6,'Status','TRLB',1,'C');






while(
$fila=mysql_fetch_array($basededatos))
    {
    
    
// Aqui empiezas a mostrar los datos

$pdf->SetFont('Arial','',6);    
$pdf->Cell(25,5,$fila[numero],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);    
$pdf->Cell(35,5,$fila[nombre],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);
$especificaciones=substr($fila[especificaciones],0,140);
$pdf->Cell(140,5,$especificaciones.'...','TRLB',0,'Q');
$pdf->SetFont('Arial','',6);    
$pdf->Cell(25,5,$fila[unidad],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);
$pdf->Cell(25,5,$fila[codigo_arancelario],'TRLB',0,'Q');
$pdf->SetFont('Arial','',6);
if(
$fila[statu]=='1')
{
$statu='Activo';
}
else
{
$statu='Inactivo';
}
$pdf->Cell(15,5,$statu,'TRLB',1,'Q');

}


$pdf->Ln(8);
$pdf->OutPut("Reporte de Materiales.pdf",'D');

?>
Lo guardas con el nombre que quieras; ejemplo: reporte.php

Ahora solo le hacer link (enlace) desde tu sistema y ya!

Ejemplo:

Puede hacer un enlace en tu menu de tu pagina o sistema:

fpdf/eporte.php

Recuerda que los reportes los colocaras en la carpeta fpdf por ñlo que al hacer el llamado solo debes agreagar el fpdf/ en los enlaces

Y al hacer clic sobre el lo descargara y ya!



Espero te sirva de ayuda!

Te estoy dando un ejemplo funcional y real de un reporte, ya que es una de mis sistemas (es decir no tiene errores porque lo uso actualmente)
por que lo colocas a las celdas esta propiedad 'TRLB', segun leo en el tutoorial debe ser 0 ó 1 ??
  #8 (permalink)  
Antiguo 25/11/2009, 10:23
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Problema con Multicell en fpdf en php

Hola mi pana!

Lo coloco asi para darle el border de las capa quee stoy creando!

Si coloca 0 le estas diciendo que NO tenga borde.

Si colocas 1 le estas diciendo que SI tenga borde

Pero si colocas TRLB le estas diciendo que tenga borde por


T=TOP
R=RIGHT
L=LEFT
B=BOTTOM

Yo los realizo asi ya que en ocaciones no necesito que el borde este en los cuatro lados de la capa!
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #9 (permalink)  
Antiguo 25/11/2009, 11:14
Avatar de willo  
Fecha de Ingreso: septiembre-2009
Ubicación: Bogotá, Colombia, Colombia
Mensajes: 5
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Problema con Multicell en fpdf en php

Yo solucione el problema del multi cell con este codigo que encntre:

Código PHP:
require_once('fpdf.php');
require_once(
'PDF.php');

class 
PDF_MC_Table extends PDF
{
var 
$widths;
var 
$aligns;

function 
SetWidths($w)
{
    
//Set the array of column widths
    
$this->widths=$w;
}

function 
SetAligns($a)
{
    
//Set the array of column alignments
    
$this->aligns=$a;
}

function 
Row($data)
{
    
//Calculate the height of the row
    
$nb=0;
    for(
$i=0;$i<count($data);$i++)
        
$nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
    
$h=5*$nb;
    
//Issue a page break first if needed
    
$this->CheckPageBreak($h);
    
//Draw the cells of the row
    
for($i=0;$i<count($data);$i++)
    {
        
$w=$this->widths[$i];
        
$a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'J';
        
//Save the current position
        
$x=$this->GetX();
        
$y=$this->GetY();
        
//Draw the border
        //$this->Rect($x,$y,$w,$h);
        //Print the text
        
$this->MultiCell($w,5,$data[$i],0,$a);
        
//Put the position to the right of the cell
        
$this->SetXY($x+$w,$y);
    }
    
//Go to the next line
    
$this->Ln($h);
}

function 
CheckPageBreak($h)
{
    
//If the height h would cause an overflow, add a new page immediately
    
if($this->GetY()+$h>$this->PageBreakTrigger)
        
$this->AddPage($this->CurOrientation);
}

function 
NbLines($w,$txt)
{
    
//Computes the number of lines a MultiCell of width w will take
    
$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>and $s[$nb-1]=="\n")
        
$nb--;
    
$sep=-1;
    
$i=0;
    
$j=0;
    
$l=0;
    
$nl=1;
    while(
$i<$nb)
    {
        
$c=$s[$i];
        if(
$c=="\n")
        {
            
$i++;
            
$sep=-1;
            
$j=$i;
            
$l=0;
            
$nl++;
            continue;
        }
        if(
$c==' ')
            
$sep=$i;
        
$l+=$cw[$c];
        if(
$l>$wmax)
        {
            if(
$sep==-1)
            {
                if(
$i==$j)
                    
$i++;
            }
            else
                
$i=$sep+1;
            
$sep=-1;
            
$j=$i;
            
$l=0;
            
$nl++;
        }
        else
            
$i++;
    }
    return 
$nl;
}

hay que extender la clase original...
  #10 (permalink)  
Antiguo 25/11/2009, 12:56
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Problema con Multicell en fpdf en php

Hola hermano!

Yo ya revice esa clase! es la que publico el amigo arriba!

Pero como se usa especificamente?

Me puedes dar un ejemplo funcional que tengas?

Gracias
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #11 (permalink)  
Antiguo 26/11/2009, 07:34
Avatar de Algadar  
Fecha de Ingreso: abril-2009
Mensajes: 115
Antigüedad: 15 años
Puntos: 1
Respuesta: Problema con Multicell en fpdf en php

Que más joelluis17!

Estoy teniendo el mismo problema que tu se me estan superponiendo los datos. como lo resolviste?
  #12 (permalink)  
Antiguo 30/11/2009, 21:55
Avatar de joelluis17  
Fecha de Ingreso: septiembre-2008
Mensajes: 182
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: Problema con Multicell en fpdf en php

Hola amigo!

Lo que yo hice fue:

Valide el numero de caracteres que contiene mi dato es decir, la longitud y luego cree una capa de un tamaño promedio ejemplo la mia fue de 80 y luego valide que si la longitud de mi dato es mayor a 80 entonces tome un multicell de "x" numero de alto!

Asi:

Mis multicell la altura es de 9 y el ancho de 80 y valide que si mi dato es menor a 80 que tome el multicell de 9 sino si es mayor a 80 y menor a 160 que tome el multicell de 4.5 si es mayor de 160 y menor a 240 que el multicell sea de 3 porque cada ves que pasa de los 80 me hace un salto de linea asi que le valide los espacios para salto de linea

Nose si me explique bien amigo!

Disculpa lo tarde de mi respuesta esque estaba de viaje!
__________________
Ing. Joel Luis
www.sidedesigne.com.ve
+58 426 3362137
BB 24AF8F04
  #13 (permalink)  
Antiguo 11/10/2013, 16:52
 
Fecha de Ingreso: julio-2012
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Problema con Multicell en fpdf en php

No se si resolvió este problema yo me enfrente a el lo que hice fue si:
|--2cm----|-------7cm--------|---------4cm----------|
nombre descripcion precio
__________________________________

memoria memoria ram 128$
de 512 Mb de
de tipo DDRR2
Y es marca
xxxxxxx.
pendrive pendrive de 2 GB 50$
de marca kingotns
es hacer un for o while de los productos
Código PHP:
Ver original
  1. $yMayor = 0;
  2. while($producto = each(productos)) {
  3.     $this->setXY($x, $y);
  4.     $this->MultiCell(2, $alturaDelParrafo, "nombre");
  5.     if ($yMayor < $this->getY()) {
  6.         $yMayor = $this->getY();
  7.     }
  8.     $this->setXY($x + 2, $y);
  9.     $this->MultiCell(7, $alturaDelParrafo, "descripcion");
  10.     if ($yMayor < $this->getY()) {
  11.         $yMayor = $this->getY();
  12.     }
  13.     $this->setXY($x + 7, $y);
  14.     $this->MultiCell(4, $alturaDelParrafo, "precio");
  15.     if ($yMayor < $this->getY()) {
  16.         $yMayor = $this->getY();
  17.     }
  18.     $y = $yMayor + 2;//2 es el espacio entre productos
  19. }
El truco es guardar la y mayor para cuando termine la fila valla a la mayor, aunque mayormente la Y mayor es la de descripción.
  #14 (permalink)  
Antiguo 03/11/2015, 13:04
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: Problema con Multicell en fpdf en php

http://www.fpdf.org/download/multicell.pdf
  #15 (permalink)  
Antiguo 27/02/2016, 20:26
 
Fecha de Ingreso: febrero-2016
Mensajes: 1
Antigüedad: 8 años, 2 meses
Puntos: 0
Pregunta Respuesta: Problema con Multicell en fpdf en php

$pdf->SetXY(15,40);
$pdf->SetFont('Arial','',6);
$pdf->Cell($ancho_zona,5, "ZONA", 1, 0, "C", 1);
$pdf->SetFont('Arial','',6);
$pdf->Cell($ancho_rif,5, "RIF", 1, 0, "C", 1);
$pdf->SetFont('Arial','',6);
$pdf->Cell($ancho_nombre,5, "NOMBRE", 1, 0, "C", 1);
$pdf->SetFont('Arial','',6);
$pdf->Cell($ancho_direccion,5, "DIRECCION", 1, 0, "C", 1);
$pdf->SetFont('Arial','',5);
$pdf->Cell($ancho_fecha,5, "F.INGRESO", 1, 1, "C", 1);

Porque la última columna se me cae a la siguiente columna
  #16 (permalink)  
Antiguo 04/07/2016, 11:15
 
Fecha de Ingreso: septiembre-2015
Mensajes: 4
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Problema con Multicell en fpdf en php

Para los que aun no han entendido el ejemplo del multicell que esta en la pagina FPDF. Se los explico.


Primero crear un archivo php con lo siguiente sin cambiar nada.

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

class PDF_MC_Table extends FPDF
{
var $widths;
var $aligns;

function SetWidths($w)
{
//Set the array of column widths
$this->widths=$w;
}

function SetAligns($a)
{
//Set the array of column alignments
$this->aligns=$a;
}

function Row($data)
{
//Calculate the height of the row
$nb=0;
for($i=0;$i<count($data);$i++)
$nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
$h=5*$nb;
//Issue a page break first if needed
$this->CheckPageBreak($h);
//Draw the cells of the row
for($i=0;$i<count($data);$i++)
{
$w=$this->widths[$i];
$a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
//Save the current position
$x=$this->GetX();
$y=$this->GetY();
//Draw the border
$this->Rect($x,$y,$w,$h);
//Print the text
$this->MultiCell($w,5,$data[$i],0,$a);
//Put the position to the right of the cell
$this->SetXY($x+$w,$y);
}
//Go to the next line
$this->Ln($h);
}

function CheckPageBreak($h)
{
//If the height h would cause an overflow, add a new page immediately
if($this->GetY()+$h>$this->PageBreakTrigger)
$this->AddPage($this->CurOrientation);
}

function NbLines($w,$txt)
{
//Computes the number of lines a MultiCell of width w will take
$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<$nb)
{
$c=$s[$i];
if($c=="\n")
{
$i++;
$sep=-1;
$j=$i;
$l=0;
$nl++;
continue;
}
if($c==' ')
$sep=$i;
$l+=$cw[$c];
if($l>$wmax)
{
if($sep==-1)
{
if($i==$j)
$i++;
}
else
$i=$sep+1;
$sep=-1;
$j=$i;
$l=0;
$nl++;
}
else
$i++;
}
return $nl;
}
}
?>

despues empiezan con la creacion del PDF. Voy a copiar lo mio.

$pdf=new PDF_MC_Table('L','mm','Legal');
$pdf->SetMargins(1,10);
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Arial','b',12);
$pdf->Cell(0,5,'Listado de Reportes del mes de '.$_POST['BuscarMes'],0,1,'C');
$pdf->Ln();
$pdf->SetFont('Arial','b',9);
$pdf->SetFillColor(255,0,0);
$pdf->SetTextColor(255);
$pdf->SetDrawColor(128,0,0);
$pdf->SetLineWidth(.3);
$pdf->SetFont('','B');
$pdf->Cell(30,7,'Reporte',1,0,'C',1);
$pdf->Cell(18,7,'Folio',1,0,'C',1);
$pdf->Cell(40,7,'Cuenta',1,0,'C',1);
$pdf->Cell(22,7,'Fecha Inicio',1,0,'C',1);
$pdf->Cell(23,7,'Fecha Termino',1,0,'C',1);
$pdf->Cell(60,7,'Direccion',1,0,'C',1);
$pdf->Cell(70,7,'Motivo Trabajo',1,0,'C',1);
$pdf->Cell(80,7,'Solucion Realizado',1,0,'C',1);
$pdf->Ln();
//Restauración de colores y fuentes
$pdf->SetFillColor(224,235,255);
$pdf->SetTextColor(0);
$pdf->SetFont('');
$numero=0;
$fill=false;

AQUI DEFINEN LA CANTIDAD DE COLUMNAS QUE VAN A REQUERIR.
$pdf->SetWidths(array(30,18,40,22,23,60,70,80));

srand(microtime()*1000000);

while($dato=mysql_fetch_array($sql)){
$fecha=date("d-m-Y",strtotime($dato[3]));
if ($fecha=='31-12-1969'){$fecha="";}
$fecha1=date("d-m-Y",strtotime($dato[4]));
if ($fecha1=='31-12-1969'){$fecha1="";}

AQUI LE INGRESAN LOS DATOS A LAS COLUMNAS.
$pdf->Row(array($dato[0],$dato[1],$dato[2],$fecha,$fecha1,$dato[5],$dato[6],$dato[7]));
}
$pdf->Output();

Como se daran cuenta no es complicado. Espero que les haya ayudado.
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

SíEste tema le ha gustado a 2 personas




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