Come generare un file PDF in PHP con tabelle

In questo tutorial, continuiamo ad analizzare la libreria gratuita FPDF, in particolare, vedremo insieme come generare un file PDF, come creare una tabella al suo interno e come personalizzarne lo stile.

Nel precedente tutorial, abbiamo visto come, in poche righe di codice, grazie alla libraria FPDF, puoi creare facilmente tabelle all’interno di file PDF. Adesso, vediamo come migliorare queste tabelle, renderle più leggibili e con uno stile personalizzato.

Per comodità, riscriviamo il codice copiandolo dal tutorial precedente.


<?php 
require('lib/fpdf.php'); 
$pdf = new FPDF(); 
$pdf->AddPage();
$pdf->SetFont('Arial','',14);

$header = array('id','nome','cognome');

$data = array(
            array(1,'Mario','Rossi'),
            array(2,'Franco','Bianchi'),
            array(3,'Giuseppe','Verdi')
);

// creiamo l'header della tabella
$pdf->SetFont('','B');
foreach($header as $col){
    $pdf->Cell(40,7,$col,1,0,'C');
}
$pdf->Ln();

// creiamo la nostra tabella e inseriamo i valori nei campi
$pdf->SetFont('','',10);
foreach($data as $row){
    foreach($row as $value){
        $pdf->Cell(40,6,$value,1,0);
    }
    $pdf->Ln();
}

$pdf->Output();

Adesso, proviamo a darli uno stile personalizzando sfondo e carattere, sia dell’header, cioè al nome delle colonne, che del contenuto della tabella.

Come generare una tabella personalizzata in file PDF con PHP

Iniziamo con personalizzare l’header (il nome assegnato alle colonne). Grazie al metodo SetFillColor(), della classe FPDF, possiamo impostare un colore di sfondo alle celle. Mentre, con il metodo SetTextColor(), possiamo modificare il colore del carattere.

Nel nostro esempio, realizzeremo una tabella dove l’intestazione avrà lo sfondo rosso e il colore del carattere sarà bianco. Quindi, modifichiamo il codice aggiungendo le due righe evidenziate in grassetto e true ai parametri passati al metodo Cell().

$pdf->SetFont('','B');
$pdf->SetFillColor(255,0,0);
$pdf->SetTextColor(255);
foreach($header as $col){
    $pdf->Cell(40,7,$col,1,0,'C',true);
}
$pdf->Ln();

Adesso, vediamo come possiamo personalizzare e rendere più carina e facile da leggere la nostra tabella.

Alterniamo il colore delle sfondo delle righe usando il grigio e il bianco. Inoltre, disegniamo solo il bordo destro e sinistro delle celle. Naturalmente, prima ricordiamoci di reimpostare il colore del testo sul nero.

Per alternare il colore dello sfondo, usiamo una variabile $fill alla quale assegniamo il valore true, per lo sfondo grigio, e false, per lo sfondo bianco.

Cerco di essere più chiaro.

Il metodo Cell() può accettare fino ad otto parametri:

Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])

Rivediamo insieme a cosa servono.

  • w:  è la larghezza della cella;
  • h: è l’ altezza della cella;
  • txt: stringa da stampare;
  • border: Indica se bisogna tracciare i bordi attorno alla cella.
    Il valore può essere sia un numero: 0: nessun bordo o 1: cornice
    o una stringa contenente alcuni o tutti i seguenti caratteri (in qualsiasi ordine):
    L: sinistro;
    T: superiore;
    R: destro;
    B: inferiore;
  • ln: Indica la posizione corrente dopo la chiamata;
    Valori possibili sono:
    0: a destra
    1: all’inizio della linea successiva
    2: in basso
    Inserire 1 equivale a inserire 0 e chiamare Ln() immediatamente dopo;
  • align: Permette di centrare o allineare il testo.
    Possibili valori sono:
    L o stringa vuota: allineamento a sinistra (valore di default)
    C: centrato
    R: allineamento a destra
  • fill: Indica se lo sfondo della cella deve essere disegnato (true) o deve essere trasparente (false);
  • link: è l’URL da associare al testo.

Quindi, imposta il colore dello sfondo in grigio in questo modo: $pdf->SetFillColor(224,235,255)  e per colorare la riga assegna true alla variabile fill di tutte le celle che la compongono.

Di conseguenza,  senza riutilizzare il metodo SetFillColor, ti basterà semplicemente assegnare false a fill per non colorare lo sfondo delle celle della riga successiva.

Il codice evidenziato in grassetto è quello che dovrai aggiungere al tuo script:

// creiamo la nostra tabella e inseriamo i valori nei campi
$pdf->SetFont('','',10);
$pdf->SetFillColor(224,235,255);
$pdf->SetTextColor(0);

$fill = false;
foreach($data as $row){
    foreach($row as $value){
        $pdf->Cell(40,6,$value,1,0,'LR',0,'L',$fill));
    }
    $pdf->Ln();
    $fill = !$fill;
}

A questo punto, vediamo come sarà il codice completo del nostro script in PHP.


<?php 
require('lib/fpdf.php'); 
$pdf = new FPDF(); 
$pdf->AddPage();
$pdf->SetFont('Arial','',14);

$header = array('id','nome','cognome');

$data = array(
            array(1,'Mario','Rossi'),
            array(2,'Franco','Bianchi'),
            array(3,'Giuseppe','Verdi')
);

// creiamo l'header della tabella
$pdf->SetFont('','B');
$pdf->SetFillColor(255,0,0);
$pdf->SetTextColor(255);
foreach($header as $col){
    $pdf->Cell(40,7,$col,1,0,'C',true);
}
$pdf->Ln();

// creiamo la nostra tabella e inseriamo i valori nei campi
$pdf->SetFont('','',10);
$pdf->SetFillColor(211,215,207);
$pdf->SetTextColor(0);

$fill = false;
foreach($data as $row){
    foreach($row as $value){
        $pdf->Cell(40,6,$value,'LR',0,'L',$fill));
    }
    $pdf->Ln();
    $fill = !$fill;
}

//chiudiamo la tabella disegnando la linea in basso
$pdf->Cell(120,6,'','T',0); 
$pdf->Output();
?>

Eseguendo lo script dovresti ottenere, come risultato, un file in pdf con un tabella simile all’immagine qui sotto:

Tabella PDF realizzata in PHP con FPDF

Conclusioni

Siamo giunti alla fine di questo piccolo tutorial. Come hai avuto modo di vedere è abbastanza semplice generare un file PDF con una tabella.

Hai visto anche che è possibile dare un stile al carattere e allo sfondo delle celle della tabella.

In questa guida ho usato la libreria FPDF, in quanto gratuita e semplice da usare, ma esistono anche altre librerie, sempre gratuite che puoi usare per generare file in PDF con php.

Ecco alcuni esempi:

Spero di esserti stato utile con la mia guida. Per qualsiasi informazione o chiarimento non esitare a contattarci attraverso la nostra pagina Facebook o via email.

Articoli correlati


Rocco Vincy

Analista/Programmatore e blogger, si occupa di sicurezza informatica e delle comunicazioni. Co-fondatore del sito/blog "BlogAmico"

Rocco Vincy ha 147 articoli e più. Guarda tutti gli articoli di Rocco Vincy

Rocco Vincy