HTML to PDF in CakePHP 3.x con TCPDF

In questo articolo vedremo una rapida e funzionale soluzione per generare un documento PDF in CakePHP 3.x, da contenuto HTML, utilizzando la libreria di terze parti TCPDF. Per maggiori informazioni sull’uso della libreria consultare il sito dell’autore su https://tcpdf.org/.

Installazione TCPDF mediante Composer

Posizionandosi con il cursore nella ROOT dell’applicazione CakePHP, lanciare il seguente comando per l’installazione utilizzando il composer:

composer require tecnick.com/tcpdf

Creazione del file Template con le impostazioni del file PDF

Posizionandoci in src/Template/Pages creiamo il seguente file denominato hello.ctp

<?php

/**
 * init TCPDF
 */
$this->layout = null;
header('Content-Type: application/pdf');
require_once(ROOT . DS . 'vendor' . DS . 'tecnick.com' . DS . 'tcpdf' . DS . 'tcpdf.php');

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('Example from HTML to PDF');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// remove default header/footer
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__) . '/lang/eng.php')) {
    require_once(dirname(__FILE__) . '/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// set font
$pdf->SetFont('times', 'BI', 20);

// add a page
$pdf->AddPage();

// set some text to print
$html = $this->element('pdf/hello');

// print a block of text using Write()
$pdf->writeHTML($html, true, false, true, false, '');

//Close and output PDF document
$pdf->Output('hello.pdf', 'D');

In questo script, segnaliamo le seguenti operazione:

  1. Disattiviamo il layout, per evitare che non ci sia contenuto html oltre a quello richiesto. In alternativa si potrebbe pensare di realizzare un layout specifico per la creazione di file pdf.
  2. Informiamo il browser che si tratta di un contenuto di tipo application/pdf, attraverso la direttiva header di php.
  3. Includiamo la libreria TCPDF presente nella directory vendor.
  4. Proponiamo un esempio tipo presente sul sito dell’autore della libreria TCPDF (https://tcpdf.org/).

Creazione dell’Element con il contenuto HTML

Creiamo il file src/Template/Element/pdf/hello.ctp in cui andremo a definire il nostro contenuto HTML da trasformare in PDF.

<h1>Hello PDF</h1>
<p>Questo esempio definisce una soluzione rapida per la generazione di un file PDF da un contenuto HTML.<p>

A questo punto e sufficiente richimare la pagina web da browser, es. http://localhost/pages/hello, per testare il funzionamento della soluzione descritta. Per dubbi e/o chiarimenti lascia un commento qui sotto

Lascia un commento