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. |