PHP – Creare file pdf con Fpdf

Come spiega la prima pagina del sito ufficiale, «FPDF è una classe PHP che permette di generare files PDF direttamente da PHP, senza utilizzare la liberia PDFlib.».

Trattandosi di una classe completamente libera (la prima F sta appunto per “free”), abbiamo la possibilità di studiarla per modificarla a nostro piacimento. Ecco perché in rete troviamo degli script già pronti che si adattano allo scopo: ne potete trovare alcuni esempi a questo indirizzo, tra l’altro accessibile direttamente dalla home page del sito.

Le sue prestazioni sono inferiori alla libreria PDFlib, ma la differenza non si risente per file poco pesanti. La sua personalizzazione, inoltre, lo rende un sostituto più che valido. Per esempio è possibile con facilità:
–  modificare il font (colore, dimensioni, allineamento, ecc.)
– creare intestazioni e piè di pagina
– inserire link tra le pagine
– inserire e gestire immagini
– gestire gli elementi del file, come i margini, l’autore del documento, ecc.
– usare diverse unità di misura

I settaggi di base di FPDF

Iniziamo a passare in rassegna le basi per l’utilizzo di questa classe.
Dalla pagina di downloads scaricate la versione più recente. All’interno del file zip (o del tgz, a seconda se adoperiate come piattaforma Windows o Linux), una volta scompattato, troverete le FAQ, la cartella con i tutorial e la cartella contenente la guida ai metodi. Vi consiglio di consultarli già al primo utilizzo, seguendoli di pari passo. Le funzioni elencate nella cartella “doc” non sono molte e in gran parte non richiedono grossi sforzi per comprenderle in vista di uno script base.

Scompattate lo zip nella cartella voluta. Per i nostri scopi supponiamo che sia caricato nella root principale del sito, ma nulla vieta di metterlo in una sottocartella, modificando il riferimento della funzione require.
Perché il pdf possa generarsi, è necessario che in precedenza non sia stata inviata nessuna informazione, per esempio che non sia stato stampato niente a video con la classica funzione echo di php. Il nostro file php, quindi, inizierà in questo modo:

1
2
3
<?php
require("fpdf/fpdf.php");
$pdf=new FPDF();

Possiamo poi settare le informazioni generali del file pdf che si andrà a creare e i margini validi per l’intero documento (per default i margini sono a 10 mm):

1
2
3
4
5
6
7
8
9
10
//setto l'autore, il creatore e il soggetto del pdf
$pdf->SetAuthor("Nome Cognome", true);
$pdf->SetCreator("Nome Cognome", true);
$pdf->SetSubject("Oggetto del documento", true);

//setto i margini sinistro, superiore e destro
$margine_sx=20;
$margine_top=15;
$margine_dx=20;
$pdf->SetMargins($margine_sx, $margine_top, $margine_dx);

Inserimento di testi e di immagini

Per la produzione del corpo interno non avete che l’imbarazzo della scelta. Ogni elemento ha la sua posizione nella pagina, stabilita da due coordinate X e Y (rispettivamente indicano il punto di origine dell’elemento in orizzontale e in verticale). Queste coordinate possono essere settate con le funzioni setX() e setY(), qualora occorresse. E’ probabile che al principio avrete un bel po’ da smanettare prima di capirci qualcosa: con il tempo (e l’esperienza) queste due funzioni si riveleranno indispensabili.

Se per esempio dovete inserire un’immagine, avrete bisogno di fare qualche esperimento con la funzione image(), ovviamente da richiamare attraverso l’oggetto $pdf-> come abbiamo visto per le precedenti funzioni, dove abbiamo settato le informazioni della pagina e i margini. Vi renderete presto conto che le immagini sono “indipendenti” dal testo, nel senso che non settando dovutamente le coordinate X e Y correrete il rischio di sovrapporle al testo.
L’elenco delle funzioni contenute nella cartella scompattata vi aiuterà a capire quali usare all’occorrenza.

Le funzioni con cui avrete più a che fare saranno senz’altro cell() e multicell(). Entrambe creano un’area dove è possibile inserire del testo, con la sola differenza che nel secondo caso il testo andrà automaticamente a capo quando raggiunge la fine della riga oppure quando incontrerà il carattere di escape “\n” (senza virgolette). Un esempio:

1
2
$pdf->Cell(100, 5, "Questo è un testo di prova", 1, 0);
$pdf->Multicell(100, 5, "Questo è un testo di prova\n in multicella");

Abbiamo creato due rettangoli, entrambi larghi 100 (millimetri, a meno che non si sia stabilita un’unità di misura diversa per il documento) e alti 5. Nella multicella il testo andrà a capo non appena incontrerà il \n.
Notiamo i parametri, nella funzione cell(), inseriti dopo il parametro della stringa:
– il primo parametro (impostato al valore 1), indica che il rettangolo sarà contornato da un bordo. Impostando il valore a 0 non apparirà il bordo. E’ altresì possibile scegliere di mostrare la cornice solo in uno o più bordi, combinando tra loro i valori L (sinistro), T (superiore), R (destro) e B (inferiore).
– il secondo parametro indica dove si posizionerà la successiva cella creata. Con il valore 0 significa che la successiva cella si creerà a fianco di questa; con 1 andrà a capo.

Senza entrare nei dettagli, altre funzioni con cui certamente vi troverete a lavorare saranno:
addPage(): forza il cambio pagina.
ln(): stabilisce uno spazio da un elemento e un altro, con altezza impostabile.
setFont(): applica dimensioni e stile ai font successivi.
setTextColor(): gestisce il colore dei font successivi.

Naturalmente è possibile integrare qualsiasi codice creato in php all’interno del file. Questo vi tornerà utile nel caso in cui i dati da mostrare debbano essere dinamici, per esempio estratti da un database.

L’output del file in formato pdf

Un’ultima notazione sulla funzione output(), che elabora effettivamente il file trasformandolo in pdf.

In gran parte dei casi basta evocare la funzione $pdf->Output(); alla fine del documento.
Può capitare però che questo metodo abbia problemi di funzionamento, spesso a causa di integrazione del pdf con il browser. In tal caso è utile usare il pdf dinamico: in pratica creiamo il file pdf in una cartella temporanea e lo estriamo in seguito. Lo script da usare è il seguente (i commenti dovrebbero essere sufficienti per capire il suo uso):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//crea il file temporaneo con permessi 0600, ovvero scrittura/lettura solo dal mio sito (gli utenti esterni non possono accedervi)
$dir="pdf_tmp/";
$file = basename(tempnam($dir, 'tmp'));

//percorso + file temporaneo
$dir_file=$dir."".$file;

//rinomino il file temporaneo con l'estensione .pdf
rename($dir_file, $dir_file.'.pdf');
$file.= '.pdf';

//percorso + file rinominato in pdf
$dir_file2=$dir."".$file;

//salva il contenuto voluto nel file appena rinominato
$pdf->Output($dir_file2, 'F');

//cambio i permessi del file creato
chmod($dir_file2, 0755);

//Reindirizzamento
header('Location: '.$dir_file2);
Etichette
Etichette:,
Ultimi Commenti
  1. Mariano
  2. Mariano
  3. Mariano
  4. Mariano
  5. davide
  6. giuseppe

Rispondi a Manuel Marangoni Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.