Faheem Hameed
Faheem Hameed

Reputation: 83

Dompdf: Force table row to split across 2 pages

I am using "dompdf/dompdf": "^0.8.3" for PDF print.

I have a simple table with rows tds with big text content... For ex:

<!DOCTYPE html>
<html>

<head>
</head>

<body>
    <table>
        <thead>
            <tr>
                <th>PRODUCT</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1-----
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                </td>
            </tr>
            <tr>
                <td>2-----
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                </td>
            </tr>
            <tr>
                <td>3-----
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                </td>
            </tr>
            <tr>
                <td>4-----
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                </td>
            </tr>
            <tr>
                <td>5-----
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
                </td>
            </tr>
        </tbody>
    </table>
</body>

</html>

enter image description here

When I print it using A4 size page, I would like to have a part of 4th row print in the first page in the available space and then continue to print the rest of the text in the next page. But it seems that all of the 4th row is moved to the second page. Is there any way to force this (using css or through a dompdf setting) as per my requirement?

I have tried the following css for the page breaks:

table {
    page-break-inside: auto;
}

table tr {
    page-break-inside: auto;
}

table tr td {
    page-break-inside: auto;
}

But they never have helped me to split a row between 2 pages.

Thanks for your quick feedback..

Cheers!!

Upvotes: 2

Views: 11537

Answers (2)

Mariana Marica
Mariana Marica

Reputation: 141

If table structure is needed and cannot replace with divs, then maybe one could transform the data into chunks of max size, and then for each chunk display a row with its contents, and break page before each chunk except the first one.

Upvotes: 0

BrianS
BrianS

Reputation: 13914

Dompdf (currently at 0.8.3 as of this post) does not support splitting table rows across pages. This is a long-standing issue with Dompdf (ref https://github.com/dompdf/dompdf/issues/98).

Your particular content, if it follows the sample you provided, does not really look to need a table structure since it only has one cell per row. You could fairly well replicate the structure using simple DIV elements.

Only gotcha is that table header. If the sample truly reflects your output you could use a page header instead.

Something along the lines of the following:

<!DOCTYPE html>
<html>

<head>
  <style>
    @page { margin-top: 50px; }
    #header { position: fixed; top: -50px; left: 0px; right: 0px; padding: 10px; text-align: center; font-weight: bold; }
  </style>
</head>

<body>

  <div id="header">
    PRODCUT
  </div>

  <div>
  1-----
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
    MCHBMES1 -- MCHBMES1 -- MCHBMES1 -- MCHBMES1 --
  </div>

</body>

</html>

Upvotes: 4

Related Questions