Nella scorsa puntata abbiamo creato dei report in PDF con la libreria FPDF; oggi vedremo un’altra libreria di questo genere, ovvero TCPDF. In effetti quest’ultima è più diffusa rispetto a FPDF, grazie all’installazione molto semplice (non dipende da librerie o estensioni) ma soprattutto per alcune funzionalità avanzate e molto interessanti.
Un giro di prova
Il classico Hello World è molto facile da realizzare, è sufficiente installare la libreria seguendo queste istruzioni:
- scaricare il pacchetto dal sito ufficiale;
- estrarre i file nel proprio spazio web. Nel nostro esempio li estrarremo nella sotto-directory lib/tcpdf/;
- includere i file PHP necessari nei propri script.
Ecco quindi il classico Hello World:
<?php require_once('lib/tcpdf/config/lang/ita.php'); require_once('lib/tcpdf/tcpdf.php'); // crea un documento PDF $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->AddPage(); // imposta grassetto (Bold) $pdf->SetFont('', 'B'); $pdf->Write(null, 'Hello World', null, null, 'C', true); // imposta font standard $pdf->SetFont('', ''); $txt = <<<EOD Lorem ipsum dolor sit amet, in diam nisl ut tellus a in, in vestibulum ante... Imperdiet nec odio et donec accumsan lacinia, dolor ut, metus aptent curabitur... EOD; $pdf->Write(null, $txt); // Invia PDF inline $pdf->Output('helloworld.pdf', 'I');
Analizziamone brevemente alcuni elementi:
- la prima istruzione require_once istruisce TCPDF sulla lingua da utilizzare per alcuni elementi, ad esempio le etichette per la paginazione, intestazioni, ecc. Nel nostro caso non sono usate, ma per report non banali è sempre meglio specificare la lingua giusta;
- il secondo require_once carica la libreria vera e propria;
- le istruzioni seguenti creano il PDF vero e proprio, creando prima un’istanza della classe TCPDF e poi aggiungendo i vari elementi;
- la variabile $txt viene specificata utilizzando l’operatore <<<, sintassi chiamata “heredoc” e che permette di scrivere molte linee di testo senza doverle concatenare;
- infine viene creato il PDF con il metodo Output(). È importante notare come il parametro ‘I’ serva per inviare il PDF direttamente nella finestra del browser, altre opzioni (cfr. documentazione) permettono di forzare il download o di salvare il file sul server stesso.
Ed ecco come appare nel browser:
Creazione di un PDF da (X)HTML
Una delle funzionalità più interessanti è sicuramente la capacità di creare dei documenti PDF a partire da sorgenti (X)HTML, aprendo la strada a diverse possibilità molto interessanti:
- creazione facilitata di documenti PDF senza dover utilizzare i metodi della classe TCPDF, che sono moltissimi e con diversi parametri da conoscere bene;
- creazione di una versione PDF delle pagine di un sito;
- realizzazione di report;
- archiviazione di siti web.
Vediamo come fare:
<?php require_once('lib/tcpdf/config/lang/ita.php'); require_once('lib/tcpdf/tcpdf.php'); // crea un documento PDF $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->AddPage(); $html = <<<EOD <h1>Esempio HTML</h1> <p> <strong>Lorem ipsum dolor sit amet</strong>, in diam nisl ut tellus a in... </p> <p> Imperdiet nec odio et donec accumsan lacinia, dolor ut, metus aptent curabitur... </p> EOD; $pdf->writeHTMLCell(0, 0, 10, 10, $html); // Invia PDF inline $pdf->Output('esempio_html.pdf', 'I');
Come potete notare, l’unica differenza è l’utilizzo del metodo writeHTMLCell(), che a differenza di Write() sa interpretare correttamente il codice HTML. In alternativa si può usare il metodo writeHTML(), che ha qualche parametro in meno. Il risultato è il seguente:
Questo metodo purtroppo ha qualche limitazione, ad esempio l’HTML deve essere ben formato (ovvero i tag devono essere bilanciati), inoltre non tutti gli elementi HTML sono supportati.