Home / Programmazione / PHP / Creare PDF con PHP e TCPDF
Mattepuffo

Creare PDF con PHP e TCPDF

Creare PDF con PHP e TCPDF

Oggi vedremo come creare file PDF con PHP.

Useremo una libreria esterna, molto ampia e con moltissimi strumenti: TCPDF.

Qui anche una pagina con le poche istruzioni per l'installazione.

Una volta eseguite le operazioni varie, vediamo come fare; lo scenario è questo: vogliamo trasformare un articolo in PDF in modo che l'utente se lo possa scaricare in locale.

Abbiamo quindi un form con qualcosa del genere dentro:

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" name="frm_download" style="float: right;">
      <a href="javascript:document.frm_download.submit();" alt="Download">Download PDF <img src="css/images/pdf.jpg" alt="Download" width="35"></a>
</form>

A questo punto vediamo il codice che viene richiamato al submit:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    include_once 'lib/conn.php';
    $pdfTitolo = NULL;
    $pdfTesto = NULL;
    $objPdf = Connessione::getInstance();
    foreach ($objPdf->getArticolo($_GET['id']) as $art) {
        $pdfTitolo = $art['art_titolo'];
        $pdfTesto = $art['art_testo'];
    }
    include_once 'create_pdf.php';
}

Eseguo una query su db e poi richiamo il file crea il PDF.

Due cose da tenere a mente:

  • la query la potete eseguire come vi pare, l'importante è che tiriate fuori i dati che vi servono
  • nel mio caso il testo è salvato in formato HTML (uno standard nel caso di blog e affini)

Vediamo cosa c'è nel file crea il PDF:

require_once 'lib/tcpdf/config/lang/ita.php';
require_once 'lib/tcpdf/tcpdf.php';

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor(PDF_CREATOR);
$pdf->SetTitle($pdfTitolo);
$pdf->SetSubject($pdfTitolo);
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, $pdfTitolo);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);
$pdf->SetFont('dejavusans', '', 10);
$pdf->AddPage();
$pdf->writeHTML($pdfTesto, true, false, true, false, '');
$pdf->lastPage();
$pdf->Output($pdfTitolo . '.pdf', 'I');

Tanta roba che andiamo a spiegare.

Innanzitutto questo file deve essere richiamato prima di produrre qualsiasi altro output sulla pagina, sennò non funziona.

Detto ciò, prima includiamo la libreria e istanziamo un oggetto TCPDF con alcuni parametri.

Poi ci sono varie impostazioni generali.

Se notate queste sono praticamente tutte costanti, che si trovano nei file di configurazione della libreria.

Così facendo abbiamo impostato un HEADER con il logo, un FOOTER con il numero di pagina, i margini generali e il font.

Aggiungiamo la pagina iniziale con la funzione AddPage e usiamo la funzione writeHTML per aggiungere il testo (che vi ricordo essere in formato HTML e preso dal db).

Sotto chiudiamo il documento con lastPage e lo mandiamo in Output nel buffer.

Questo può essere già un buon esempio, ma vi consiglio di dare un'occhiata agli esempi sul sito e leggervi un pò di documentazione per farvi un'idea.

Ciao!!