Unire PDF in Laravel e laravel-pdfmerger
laravel-pdfmerger è una libreria PHP per Laravel che ci permette di unire PDF creandone uno unico.
In questo articolo vediamo come usarla, in congiunzione a Dompdf (di cui vi rimando a questo articolo per l'installazione e configurazione).
Cominciamo con l'installazione della libreria, che si porta dietro diverse dipendenze:
composer require webklex/laravel-pdfmerger
Poi aprite il file config/app.php ed aggiungete queste due righe:
'providers' => [
...
Webklex\PDFMerger\Providers\PDFMergerServiceProvider::class
],
'aliases' => [
...
'PDFMerger' => Webklex\PDFMerger\Facades\PDFMergerFacade::class
]
A questo punto vediamo il controller:
namespace App\Http\Controllers;
use Barryvdh\DomPDF\Facade as PDF;
use Illuminate\Support\Facades\Storage;
use Webklex\PDFMerger\Facades\PDFMergerFacade as PDFMerger;
class TestController extends Controller {
public function index() {
try {
$data = array('nome' => 'matteo');
$pdf = PDF::loadView('test', ['data' => $data]);
Storage::put('public/tmp_pdf/test.pdf', $pdf->output());
$data2 = array('nome' => 'matteo2');
$pdf2 = PDF::loadView('test', ['data' => $data2]);
Storage::put('public/tmp_pdf/test2.pdf', $pdf2->output());
$oMerger = PDFMerger::init();
$oMerger->addPDF(storage_path('app/public/tmp_pdf/test.pdf'), 'all');
$oMerger->addPDF(storage_path('app/public/tmp_pdf/test2.pdf'), 'all');
$oMerger->merge();
$oMerger->setFileName('file.pdf');
return $oMerger->download();
} catch (\RuntimeException $ex) {
return response()->json([
'res' => 'ko',
'message' => 'Errore: ' . $ex->getMessage()
]);
}
}
}
Prima creiamo due PDF partendo dallo stesso template, ma passandogli diversi valori.
Poi li uniamo e li mandiamo in download.
Giusto per completezza, questo il template:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<style>
@page {
margin: 0 0;
}
body {
margin-top: 3.3cm;
margin-left: 2cm;
margin-right: 2cm;
margin-bottom: 2cm;
font-size: 16px;
}
.pagenum:before {
content: counter(page);
}
</style>
<footer id="prev_footer">
<span class="pagenum"></span>
</footer>
<main>
<!-- PAG 1 -->
<div style="page-break-after: always;">
<h2>{{$data['nome']}}</h2>
</div>
</main>
</body>
</html>
Enjoy!
php laravel dompdf pdf pdfmerger
Commentami!