startupsmith
startupsmith

Reputation: 5764

dompdf Page break if element is exceeding page height?

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

Answers (5)

Shibbir Ahmad
Shibbir Ahmad

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

Viraj Amarasinghe
Viraj Amarasinghe

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

andreas-supersmart
andreas-supersmart

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

BrianS
BrianS

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

KarinG - Semper IT
KarinG - Semper IT

Reputation: 167

Here's a trick: place the <table> you do NOT want to print across multiple pages in another <table>.

Upvotes: 5

Related Questions