0

I'm generating a PDF from HTML using mPDF, and when the document contains a large amount of content, an almost blank first page is added unexpectedly. This only happens with longer documents — shorter ones work fine.

That is function generating PDF:

private function getMPDF($filename = null) { $mpdf = $this->mpdfInit(); $mpdf->charset_in = 'utf-8'; $mpdf->SetTopMargin(33); $mpdf->WriteHTML($this->html); if ($filename === null) { return $mpdf->Output('', "S"); } else { $mpdf->Output($filename, "F"); } } 

The $this->html contains HTML with multiple nested tags and paragraphs, such as this:

<table style="width: 700px;" border="0"> <tbody> <tr> <td style="width: 432px;"> </td> <td style="width: 225px; padding-top: 8px;"> <p style="font-size: 13px; font-family: Arial;">Pani<br />[IMIĘ I NAZWISKO]<br />[ADRES]<br />[KOD POCZTOWY] [MIASTO]</p> </td> <td style="width: 43px;"> </td> </tr> </tbody> </table> <p> </p> <table style="text-align: justify; width: 700px;" border="0"> <tbody> <tr> <td style="width: 50px;"> </td> <td style="width: 600px;"> <p style="font-size: 13px; font-family: Arial;">[DATA]</p> <p> </p> <p style="font-size: 15px; font-family: Georgia;">Dotyczy zgłoszenia o numerze [NUMER_ZGŁOSZENIA] z dnia [DATA]; przedmiot: [NAZWA_SPRZĘTU]; numer dokumentu: [NUMER_DOKUMENTU].</p> <p> </p> <p> </p> <p style="font-size: 13px; font-family: Arial;">Szanowna Pani,</p> <p> </p> <p style="font-size: 13px; font-family: Arial;">Informujemy, że po analizie dostępnych informacji nie stwierdzono przesłanek do pozytywnego rozpatrzenia zgłoszenia.<br /><br />Na podstawie przeprowadzonych czynności ustalono, że nie wystąpiły okoliczności, które uzasadniałyby dalsze działanie.</p> <br /> <p style="font-size: 13px; font-family: Arial;">Podjęta decyzja wynika z:</p> <p style="font-size: 13px; font-family: Arial;">- informacji zebranych podczas zgłoszenia<br />- analizy technicznej<br /><br />Zgłoszony opis: brak ładowania, pęknięcie plastiku, brak aktywacji systemu. Wskazana data: [DATA].<br /><br />W wyniku analizy technicznej stwierdzono mechaniczne uszkodzenie elementów: <br />- bateria cmos<br />- osłona zawiasów<br /><br /><br />Stwierdzono również, że niektóre elementy uległy naturalnemu zużyciu, co nie stanowi podstawy do dalszego działania w tym zakresie.</p> <p> </p> <p style="font-size: 13px; font-family: Arial;">W związku z powyższym brak jest podstaw do zmiany stanowiska. </p> </td> <td> </td> </tr> <tr> <td style="width: 50px;"> </td> <td style="width: 600px;"> <p style="font-size: 13px; font-family: Arial;"><br />Informujemy o możliwości przekazania sprawy do niezależnych instytucji oraz skorzystania z dostępnych środków odwoławczych. Sprawa może być również rozpatrzona przez sąd właściwy miejscowo zgodnie z obowiązującymi przepisami.</p> </td> <td style="width: 50px;"> </td> </tr> <tr> <td style="width: 50px;"> </td> <td style="vertical-align: top; text-align: justify; width: 600px;"> <p style="font-size: 13px; font-family: Arial;"><br />Sprawy sporne mogą być również rozpatrywane w drodze pozasądowego postępowania przed wyznaczonymi instytucjami, zgodnie z obowiązującymi przepisami prawa.</p> </td> <td style="width: 50px;"> </td> </tr> <tr> <td style="width: 50px;"> </td> <td style="text-align: justify;"> <p style="font-size: 13px; font-family: Arial;">[NAZWA INSTYTUCJI] jest administratorem danych, które są przetwarzane zgodnie z obowiązującymi przepisami. Kontakt z Inspektorem Ochrony Danych możliwy jest za pośrednictwem formularza na stronie [STRONA], pisemnie lub mailowo: iod@[DOMENA].pl. Szczegóły dostępne są również pod numerem telefonu [NUMER].</p> <p style="font-size: 13px; font-family: Arial;"><br /><br />Z wyrazami szacunku</p> <br /> <p style="font-size: 13px; font-family: Arial;">[IMIĘ I NAZWISKO]<br /> <img src="[ZDJĘCIE]" alt="" width="190" /> <br />Główny Specjalista<br />[DZIAŁ]</p> </td> <td style="width: 50px;"> </td> </tr> </tbody> </table> 

After debugging, I noticed the issue seems to be related to the table element. When I remove the table (or extract all its content before rendering), the blank page disappears — but this breaks other documents, so it's not a viable solution.

I also tried modifying margins and adding CSS to control page breaks:

table { page-break-inside: auto; } tr { page-break-inside: avoid; } thead { display: table-header-group; } tbody { display: table-row-group; } 
2
  • Please post a minimal reproducible example . See this Commented Jul 19 at 3:03
  • You can add: $mpdf->shrinkTablesToFit = 1; Commented Jul 19 at 5:03

1 Answer 1

0

You can add:

$mpdf->shrinkTablesToFit = 1; 

Also check the page breaks:

table { page-break-inside: avoid !important; page-break-before: auto !important; page-break-after: auto !important; } tr, td { page-break-inside: avoid !important; page-break-before: auto !important; page-break-after: auto !important; } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.