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.

