Reputation: 5764
What is the best way to do page breaks in dompdf?
I have had a look here at the page-break-before css attribute, but it didn't work when I did:
table {page-break-before:auto;}
The page still breaks in the middle of my table.
Is it possible to setup my html/css so that the page will break before the element if the element is going to exceed the page height?
Ideally I would like to divide my html up in to div sections so that each section will start on a new page if it is going to exceed the height of the current page.
Upvotes: 49
Views: 120658
Reputation: 143
//Firstly assign a variable before starting for loop and set post-increment operator inside for loop. secondly, use with condition of data display item in a single page.
<?php $n=1 ?>
@foreach ($purchases as $key=> $purchase)
<tr >
<td> {{ $key + 1 }} </td>
<td> {{ $purchase->supplier->company_name ?
$purchase->supplier->company_name : "" }} </td>
<td> {{ "S-".$purchase->id }} </td>
<td> {{ salte_items($purchase->purchaseItems) }} </td>
<td> {{ $purchase->created_at->format('d-m-Y') }} </td>
<td> {{ intval($purchase->total) }} </td>
</tr>
@if ( $n % 25 == 0 )
<div style="page-break-before:always;"> </div>
@endif
<?php $n++ ?>
@endforeach
Upvotes: 1
Reputation: 941
In my case it was happened since I have used a table inside another table. Like,
<table>
<tr>
<td>
<table></table>
</td>
</tr>
</table>
So I did was getting the table out. Solved my issue.
Upvotes: 3
Reputation: 4294
You might make quick tests with this online debugger - i finally found my pagebreak and margin issue after days of testing.
Excursus: Did anyone install a debug environment on the development/production environment and can point me to any documentation or tutorial?
Upvotes: 11
Reputation: 13914
Using page-break-inside: auto;
basically says to dompdf "do what you would normally do when breaking pages."
To force a page break before / after your table you would use page-break-before: always;
/ page-break-after: always;
.
To ask dompdf to avoid breaking inside an element you would use page-break-inside: avoid;
.
Upvotes: 105
Reputation: 167
Here's a trick: place the <table>
you do NOT want to print across multiple pages in another <table>
.
Upvotes: 5