When generating a PDF with DomPDF package, you may need a PDF with more than one page. For such cases, you may want to add page numbers at the bottom of page. Here's how.
Notice: This example is based on a longer tutorial on generating a simple invoice PDF using the DomPDF package.
Enable Embedded PHP
First, we must enable embedded PHP. This can be done in two ways: globally in the config or for a specific PDF.
Option 1: Globally
Globally, it can be set in the config/dompdf.php
by setting options.enable_php
to true
.
config/dompdf.php:
return [ // ... 'options' => [ // ... 'enable_php' => false, // ... ],];
If you don't have config published, you do that via an artisan command:
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
Option 2: Before PDF Render
Setting options before generating a PDF can be done using the setOptions()
method, which accepts options as an array.
$pdf = Pdf::loadView('pdf', ['data' => $data]);$pdf->setOptions(['enable_php' => true]); return $pdf->stream();
Showing Page Numbers
When PHP embed is enabled in the View, the Dompdf\Dompdf
instance is accessible through the $pdf
variable. In the <script type="text/php">...</script>
, we can add code to add page numbers.
// ...<body> // ... <script type="text/php"> if (isset($pdf)) { $pdf->page_script(' $text = __("Page :pageNum/:pageCount", ["pageNum" => $PAGE_NUM, "pageCount" => $PAGE_COUNT]); $font = null; $size = 9; $color = array(0,0,0); $word_space = 0.0; // default $char_space = 0.0; // default $angle = 0.0; // default // Compute text width to center correctly $textWidth = $fontMetrics->getTextWidth($text, $font, $size); $x = ($pdf->get_width() - $textWidth) / 2; $y = $pdf->get_height() - 35; $pdf->text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle); '); } </script></body></html>
After downloading the PDF, the page number should be in the footer.
No comments or questions yet...