PHP: come generare PDF online

Eccoci di nuovo a parlare di php.

Potrebbe capitare che qualcuno ci chieda di realizzare un sistema online che produca files pdf, per l'emisioine di ricevute, biglietti, produzione di listini o chissà cos'altro. Chiaramente per un risultato quantomeno veloce, è difficile pensare di poter fare tutto da soli, da zero.

Per fortuna con il nostro linguaggio di programmazione preferito - php -, è possibile manipolare questo tipo di files, servendoci di alcune librerie gratuite, ed ottenere risultati molto soddisfacenti.

La soluzione a cui voglio introdurvi oggi, si chiama FPDF.


Premesso che si tratta solo di una piccola introduzione che vuole essere un indizio nella vostra ricerca e che possa stimolarvi a documentarvi meglio, cominciamo.

Sul sito del progetto è presente tutto il necessario per iniziare, quindi per prima cosa portatevi su fpdf.org e scaricate il file dalla sezione download, la classe e tutto quanto, decomprimetelo, e copiatelo sul vostro spazio web (o sul vostro server locale);

naturale passaggio successivo è richiamarlo nei vostri script, mediante il solito "include" o "require", stando attenti a indicare il path relativo esatto.

L'esempio seguente genera un file pdf contentente il classico testo "Hello World!"

[spoiler show="mostra codice php" hide="nascondi codice php"]
require('fpdf17/fpdf.php');#questo i percorso in cui è situata la mia cartella
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
[/spoiler]
Nell'eseguirlo noterete che il vostro browser vi chiederà di scaricare un file pdf.
Lo script invoca il costruttore (al quale è possibile passare o meno dei parametri espliciti), creando un oggetto di tipo fpdf: è possibile passare dei parametri al costruttore, per ottenere strutture differenti quali layout orizzontale, formato Letter...;
Secondo passaggio è la creazione della pagina mediante il metodo Addpage, quindi l'impostazione del carattere per il documento (nel nostro caso Arial Bold da 16punti); la funzione Cell, indica le coordinate spaziali della cella che dovrà contenere il testo, ed il testo stesso ed accetta svariati parametri inerenti ad esempio l'allineamento e il ritorno a capo.
infine viene invocata la funzione che produce l'Output.
Se vi interessa la personalizzazione di intestazione e piè di pagina, la cosa è possibile, estendendo la classe e praticando quello che si chiama overriding, per le due classi dedicate (header e footer).
Incollo un esempio in modo che possiate darci un'occhiata.
[spoiler show="Mostra codice php" hide="Nascondi codice php"]require('fpdf.php');class PDF extends FPDF
{
// Page header
function Header()
{
// Logo
$this->Image('logo.png',10,6,30);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Move to the right
$this->Cell(80);
// Title
$this->Cell(30,10,'Title',1,0,'C');
// Line break
$this->Ln(20);
}// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}// Instanziazione delle classi
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++)
$pdf->Cell(0,10,'Printing line number '.$i,0,1);
$pdf->Output();

[/spoiler]

Tra le opzioni incluse in questo altro script, troviamo la stampa del numero di riga (impostata tramite la funzione Cell) e la preenza di un file grafico, impostato come logo.
Premuratevi che il file logo.png, sia presente all'interno della cartella in cui girerà lo script (o di linkare correttamente il file scelto).
Di cose se ne potrebbero dire ancora, e non poche, ma già da questi due rudimentali esempi potrete intuire le potenzialità della libreria in oggetto e delle eventuali combinazioni con altre funzioni.
Certo, a dirla tutta, non è esattamente roba da neofiti, l'argomento non è molto vasto, e richede un po' di pratica,  ma per fortuna è disponibile una chiara documentazione scritta quasi interamente in lingua italiana, nonchè una sezione agli script degli utenti, all'interno della quale troverete, tra le altre le due interessanti classi produrre codici a barre, o per adattare il testo al foglio ...
Non mi resta che augurarvi buono studio.

Autore: Luigi Lacquaniti

Web designer freelance.

Condividi su