Tablas

Este tutorial se explicará como crear tablas fácilmente.
<?php

require('fpdf.php');



class PDF extends FPDF

{

// Cargar los datos

function LoadData($file)

{

    // Leer las líneas del fichero

    $lines = file($file);

    $data = array();

    foreach($lines as $line)

        $data[] = explode(';',trim($line));

    return $data;

}



// Tabla simple

function BasicTable($header, $data)

{

    // Cabecera

    foreach($header as $col)

        $this->Cell(40,7,$col,1);

    $this->Ln();

    // Datos

    foreach($data as $row)

    {

        foreach($row as $col)

            $this->Cell(40,6,$col,1);

        $this->Ln();

    }

}



// Una tabla más completa

function ImprovedTable($header, $data)

{

    // Anchuras de las columnas

    $w = array(40, 35, 45, 40);

    // Cabeceras

    for($i=0;$i<count($header);$i++)

        $this->Cell($w[$i],7,$header[$i],1,0,'C');

    $this->Ln();

    // Datos

    foreach($data as $row)

    {

        $this->Cell($w[0],6,$row[0],'LR');

        $this->Cell($w[1],6,$row[1],'LR');

        $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R');

        $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');

        $this->Ln();

    }

    // Línea de cierre

    $this->Cell(array_sum($w),0,'','T');

}



// Tabla coloreada

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, 45, 40);

    for($i=0;$i<count($header);$i++)

        $this->Cell($w[$i],7,$header[$i],1,0,'C',true);

    $this->Ln();

    // Restauración de colores y fuentes

    $this->SetFillColor(224,235,255);

    $this->SetTextColor(0);

    $this->SetFont('');

    // Datos

    $fill = false;

    foreach($data as $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,number_format($row[2]),'LR',0,'R',$fill);

        $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);

        $this->Ln();

        $fill = !$fill;

    }

    // Línea de cierre

    $this->Cell(array_sum($w),0,'','T');

}

}



$pdf = new PDF();

// Títulos de las columnas

$header = array('País', 'Capital', 'Superficie (km2)', 'Pobl. (en miles)');

// Carga de datos

$data = $pdf->LoadData('paises.txt');

$pdf->SetFont('Arial','',14);

$pdf->AddPage();

$pdf->BasicTable($header,$data);

$pdf->AddPage();

$pdf->ImprovedTable($header,$data);

$pdf->AddPage();

$pdf->FancyTable($header,$data);

$pdf->Output();

?>

[Demo]

Siendo una tabla un conjunto de celdas, lo natural es construirla de ellas. El primer ejemplo es el más básico posible: celdas con bordes simples, todas del mismo tamaño y alineadas a la izquierda. El resultado es algo rudimentario, pero es muy rápido de conseguir.

La segunda tabla tiene algunas mejoras: cada columna tiene su propio ancho, los títulos están centrados y el texto se alinea a la derecha. Más aún, las líneas horizontales se han eliminado. Esto se consigue mediante el parámetro border del método Cell(), que especifica qué bordes de la celda deben imprimirse. En este caso, queremos que sean los de la izquierda (L) y los de la derecha (R). Seguimos teniendo el problema de la línea horizontal de fin de tabla. Hay dos posibilidades: o comprobar si estamos en la última línea en el bucle, en cuyo caso usaremos LRB para el parámtro border; o, como hemos hecho aquí, añadir la línea una vez que el bucle ha terminado.

La tercera tabla es similar a la segunda, salvo por el uso de colores. Simplemente hemos especificado los colores de relleno, texto y línea. El coloreado alternativo de las filas se consigue alternando celdas transparentes y coloreadas.