Informazioni

  • Copyright © 2021 Gabriele Romanato
  • Codice fiscale: RMNGRL78L20A485X
  • Privacy Policy

Laravel: generare file PDF con mPDF

In questo tutorial vedremo come generare documenti PDF in Laravel usando la libreria mPDF.

mPDF è una libreria PHP che genera documenti PDF a partire da una stringa HTML. Questa libreria supporta tutti i tag HTML e gran parte degli stili CSS che possono essere aggiunti in un file separato o in modo embedded e inline.

Per prima cosa includiamo la libreria usando Composer.

composer require mpdf/mpdf

Ora definiamo la route che, avendo come parametro un documento del nostro sito, genererà la sua versione PDF. Creiamo quindi il metodo del controller.

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
use Mpdf;

class MyController extends Controller
{
    public function print(Post $post)
   {
       $pdf_content = '<h1>' . $post->title . '</h1>';
       $pdf_content .= '<p>' . date('d/m/Y', strtotime($post->date)) . ' / ' . $post->category->name . '</p>';
       $pdf_content .= $post->content;

       $pdf_name = $post->slug . '.pdf';

       $mpdf = new Mpdf\Mpdf();
       $mpdf->WriteHTML($pdf_content);
       return $mpdf->Output($pdf_name, 'I');
   }
}

L'aspetto da tenere presente è che mPDF genererà gli header HTTP necessari per servire il documento PDF e il metodo Output() terminerà automaticamente la sua esecuzione non appena il documento verrà generato. L'unica cosa da fare in Laravel è aggiungere l'istruzione return per inviare il documento al flusso di output della route.

Il parametro I è una costante di mPDF che indica che il documento verrà visualizzato nel browser senza forzare il download. Il primo parametro del metodo Output() definisce invece il nome del file PDF quando questo verrà scaricato.

Ora possiamo definire la route e il suo percorso.

Route::get('/print/{post:slug}', 'App\Http\Controllers\MyController@print')->name('print');

Infine non ci resta che inserire il link dinamico alla route nella view del singolo documento.

 <a href="{{ route('print', ['post' => $post->slug]) }}"><i class="far fa-file-pdf"></i> Versione PDF</a>

Come si può notare, la procedura è relativamente semplice.

Precedente PHP: login con i cookie PHP: login con i cookie
PHP: creare un carrello di un e-commerce Successivo PHP: creare un carrello di un e-commerce