Laravel Mpdf: Generate PDF Files with ease.
Easily generate PDF files using Laravel's Blade templates and the MPDF library. This package has been tested since Laravel 5.4., (*1)
Installation
Run this composer command in your laravel application:, (*2)
composer require carlos-meneses/laravel-mpdf
Important Notes:
br/, (*5)
To start using Laravel, add the Service Provider and the Facade to your config/app.php:, (*6)
Note: This package supports auto-discovery features of Laravel 5.5+, You only need to manually add the service provider and alias if working on Laravel version lower then 5.5., (*7)
'providers' => [
// ...
Mccarlosen\LaravelMpdf\LaravelMpdfServiceProvider::class
]
'aliases' => [
// ...
'PDF' => Mccarlosen\LaravelMpdf\Facades\LaravelMpdf::class
]
Basic Usage
To use Laravel Mpdf add something like this to one of your controllers. You can pass data to a view in /resources/views., (*8)
//....
use PDF;
class ReportController extends Controller
{
public function viewPdf()
{
$data = [
'foo' => 'bar'
];
$pdf = PDF::loadView('pdf.document', $data);
return $pdf->stream('document.pdf');
}
}
Config
You can use a custom file to overwrite the default configuration. Just execute php artisan vendor:publish --tag=mpdf-config or create config/pdf.php and add this:, (*9)
return [
'mode' => '',
'format' => 'A4',
'default_font_size' => '12',
'default_font' => 'sans-serif',
'margin_left' => 10,
'margin_right' => 10,
'margin_top' => 10,
'margin_bottom' => 10,
'margin_header' => 0,
'margin_footer' => 0,
'orientation' => 'P',
'title' => 'Laravel mPDF',
'author' => '',
'creator' => '',
'subject' => '',
'keywords' => '',
'watermark' => '',
'show_watermark' => false,
'show_watermark_image' => false,
'watermark_font' => 'sans-serif',
'display_mode' => 'fullpage',
'watermark_text_alpha' => 0.1,
'watermark_image_path' => '',
'watermark_image_alpha' => 0.2,
'watermark_image_size' => 'D',
'watermark_image_position' => 'P',
'custom_font_dir' => '',
'custom_font_data' => [],
'auto_language_detection' => false,
'temp_dir' => storage_path('app'),
'pdfa' => false,
'pdfaauto' => false,
'use_active_forms' => false,
];
To override this configuration on a per-file basis use the fourth parameter of the initializing call like this:, (*10)
// ...
PDF::loadView('pdf', $data, [], [
'title' => 'Another Title',
'margin_top' => 0
])->save($pdfFilePath);
Get instance your Mpdf
You can access all mpdf methods through the mpdf instance with getMpdf method., (*11)
use PDF;
$pdf = PDF::loadView('pdf.document', $data);
$pdf->getMpdf()->AddPage(/*...*/);
If you want to have headers and footers that appear on every page, add them to your <body> tag like this:, (*12)
<htmlpageheader name="page-header">
Your Header Content
</htmlpageheader>
<htmlpagefooter name="page-footer">
Your Footer Content
</htmlpagefooter>
Now you just need to define them with the name attribute in your CSS:, (*13)
@page {
header: page-header;
footer: page-footer;
}
Inside of headers and footers {PAGENO} can be used to display the page number., (*14)
Included Fonts
By default you can use all the fonts shipped with Mpdf., (*15)
Custom Fonts
You can use your own fonts in the generated PDFs. The TTF files have to be located in one folder, e.g. resources/fonts/. Add this to your configuration file (/config/pdf.php):, (*16)
return [
'custom_font_dir' => base_path('resources/fonts/'), // don't forget the trailing slash!
'custom_font_data' => [
'examplefont' => [ // must be lowercase and snake_case
'R' => 'ExampleFont-Regular.ttf', // regular font
'B' => 'ExampleFont-Bold.ttf', // optional: bold font
'I' => 'ExampleFont-Italic.ttf', // optional: italic font
'BI' => 'ExampleFont-Bold-Italic.ttf' // optional: bold-italic font
]
// ...add as many as you want.
]
];
Now you can use the font in CSS:, (*17)
body {
font-family: 'examplefont', sans-serif;
}
Chunk HTML
For big HTML you might get Uncaught Mpdf\MpdfException: The HTML code size is larger than pcre.backtrack_limit xxx error, or you might just get empty or blank result. In these situations you can use chunk methods while you added a separator to your HTML:, (*18)
//....
use PDF;
class ReportController extends Controller
{
public function generate_pdf()
{
$data = [
'foo' => 'hello 1',
'bar' => 'hello 2'
];
$pdf = PDF::chunkLoadView('<html-separator/>', 'pdf.document', $data);
return $pdf->stream('document.pdf');
}
}
```html, (*19)
## Added Support for the Macroable Trait
You can configure the macro in the `AppServiceProvider` provider file.
```php
//...
use Mccarlosen\LaravelMpdf\LaravelMpdf;
class AppServiceProvider extends ServiceProvider
{
//...
public function boot()
{
LaravelMpdf::macro('hello', function () {
return "Hello, World!";
});
}
//...
}
Now, (*20)
PDF::loadView(/* ... */)->hello();
License
Laravel Mpdf is open-sourced software licensed under the MIT license, (*21)