Страница разрыва таблицы php без строк на следующей странице

У меня есть таблица php, которая содержит информацию о выставлении счетов за определенные номера. После создания этой таблицы я экспортирую ее в pdf, используя mpdf. Если в таблице есть определенное количество строк, она странным образом разбивает страницу, заставляя заголовки повторяться на следующей странице без строк. Вот формат таблицы:

Таблица содержит до 3 заголовков внутри <thead> теги, как это:

<table class="items" width="100%" style="font-size: 9pt; border-collapse: collapse;" cellpadding="8">
    <thead>
        <tr>
            <td width="30.3%">Forbrug</td>
            <td width="23.1%">Periode</td>
            <td width="10.76%">Tid/MB</td>
            <td width="9.28%">Enheder</td>
            <td width="12.9%" align="right">I alt</td>
            <td width="13.3%" align="right">I alt+<b>moms</b></td>
        </tr>
    </thead>

таким образом строки из базы данных добавляются через некоторое время.. ничего особенного

<tr>
    <td>'.$produktNameFromDatabase.'</td>
    <td>'.$periodeFromDatabase.'</td>
    <td>'.$tidMbFromDatabase.'</td>
    <td>'.$enhederFromDatabase.'</td>
    <td align="right">'.number_format((float)$produktpris, 2, ',', '.').' kr.</td>
    <td align="right"><b>'.number_format((float)$produktpris*(1 + (0.25 * $moms)) - $momsDiscount, 2, ',', '.').' kr.</b></td>
</tr>

с общим количеством строк в конце

        <tr>
            <td class="blanktotal" colspan="1" rowspan="6"></td>
            <td class="blanktotal" colspan="1" rowspan="6"></td>
            <td class="totals" colspan="2">Subtotal:</td>
            <td class="totals" colspan="2">'.number_format((float)$pris1, 2, ',', '.').' kr.</td>
        </tr>
        <tr>
            <td class="totals1" colspan="2">Moms:</td>
            <td class="totals1" colspan="2">'.number_format((float)$pris1*(0.25 * $moms) - $momsTotal, 2, ',', '.').' kr.</td>
        </tr>
        <tr>
            <td class="totals1" colspan="2"><b>TOTAL:</b></td>
            <td class="totals1" colspan="2"><b>'.number_format((float)$pris1*(1 + (0.25 * $moms)) - $momsTotal, 2, ',', '.').' kr.</b></td>
        </tr>
    </tbody>
</table>

!!! ВСЕ, что вы уже видели, включая итоги, являются частью таблицы!

Вот настройки mpdf, которые у меня есть:

В PhP:

$mpdf=new mPDF('win-1252','A4','','',20,15,48,25,10,10);
$mpdf->useOnlyCoreFonts = true;    // false is default
$mpdf->SetProtection(array('print'));
$mpdf->SetTitle("Suggestive Title");
$mpdf->SetAuthor("Author");
$mpdf->SetWatermarkText("Faktura");
$mpdf->showWatermarkText = true;
$mpdf->watermark_font = 'DejaVuSansCondensed';
$mpdf->watermarkTextAlpha = 0.1;
$mpdf->SetDisplayMode('fullpage');

В HTML:

$html .= '<!--mpdf
    <htmlpageheader name="myheader">
        <table width="100%"><tr>
            <td width="50%" style="color:#000000;">
                <span style="font-weight: bold; font-size: 14pt;">
                    Company Name
                </span>
                Company Information
            </td>
            <td width="50%" style="text-align: right;">
                <img src="image.jpg" />
                    Invoice Information <br />Side: {PAGENO} af {nb}
                </td>
        </tr></table>
    </htmlpageheader>

    <htmlpagefooter name="myfooter">
        <div style="border-top: 1px solid #000000; font-size: 9pt; text-align: center; padding-top: 3mm; ">
            Footer Stuff
        </div>
        <div style="font-size: 9pt; text-align: center;">
            Other Footer Stuff
        </div>
    </htmlpagefooter>

    <sethtmlpageheader name="myheader" value="on" show-this-page="1" />
    <sethtmlpagefooter name="myfooter" value="on" />
mpdf-->';

Некоторые стили, которые я использую

body {font-family: sans-serif;
    font-size: 10pt;
}
p { margin: 0pt;
}
td { vertical-align: top; }
.items td {
    border-left: 0.1mm solid #000000;
    border-right: 0.1mm solid #000000;
}
table thead td { background-color: #d4ffaa;
    border: 0.1mm solid #000000;
}
.items td.blanktotal {
    background-color: #FFFFFF;
    border: 0mm none #000000;
    border-top: 0.1mm solid #000000;
    border-right: 0.0mm solid #000000;
}
.items td.totals {
    text-align: right;
    border-top: 0.1mm solid #000000;
    border-right: 0.0mm solid #000000;
    border-left: 0.0mm solid #000000;
}
.items td.totals1 {
    text-align: right;
    border-top: 0.0mm solid #000000;
    border-right: 0.0mm solid #000000;
    border-left: 0.0mm solid #000000;
}

Результат выглядит примерно так:

Эта проблема возникает только тогда, когда количество строк заполняет страницу. Если он переполняется, это не является серьезной проблемой, поскольку заголовки таблиц все еще находятся на следующей странице (все они, к сожалению, не только на последней), а остальные строки добавляются далее.

Как я могу избавиться от этих пустых строк, в этом особом случае?

Спасибо!

!! РЕДАКТИРОВАТЬ: Добавлено больше информации, код и лучшее изображение дела. Извините, что не сделал это в первый раз!

РЕДАКТИРОВАНИЕ № 2: Я только что заметил на других примерах, которые имели более 1 страницы строк, что <thead> сохранить свои позиции на следующих страницах. Так происходит все время. Есть ли способ отключить это, чтобы другие <thead> s просто перейдет на следующую страницу сверху страницы, не помня позицию на предыдущей странице?

2 ответа

Решение

В конце концов я нашел решение. Лучший способ избавиться от этих вещей - заменить <thead> теги с <th>, <thead> имеет предопределенный стиль, который заставляет заголовок таблицы повторяться на каждой странице. <th> заголовок перестанет повторяться на следующих страницах (удачных или неудачных), но это устранит пространство, вызванное <thead>стиль

Вам нужно установить верхние и нижние колонтитулы в отдельных строках, например так:

require_once __DIR__ . '/../vendor/autoload.php';

$stylesheet = '
.table-header{
    border: none;
    background-color: yellow;
    width: 100%;
}
.table-header td{
    border-right: 1px solid;
}
.table-body{
    border: none;
    background-color: transparent;
    width: 100%;
}
.table-body td{
    border-right: 1px solid;
    border-bottom: 1px solid;
}
.table-footer{
    border: none;
    background-color: transparent;
    width: 100%;
}
.table-footer .td-number{
    text-align: right;
}
';

/* Sample data */
$html = '<table class="table-body">';
for ($i = 1; $i <= 100; $i++) {
    $html.='<tr>
    <td width="30.3%">Forbrug '.$i.'</td>
    <td width="23.1%">Periode '.$i.'</td>
    <td width="10.76%">'.$i.' MB</td>
    <td width="9.28%">Val '.$i.'</td>
    <td width="12.9%" align="right">I alt '.$i.'</td>
    <td width="13.3%" align="right"><b>moms</b> '.$i.'</td>
    </tr>';
}
$html.= '</table>';

$header = '<table class="table-header"><tr>
<td width="30.3%">Forbrug</td>
<td width="23.1%">Periode</td>
<td width="10.76%">Tid/MB</td>
<td width="9.28%">Enheder</td>
<td width="12.9%" align="right">I alt</td>
<td width="13.3%" align="right">I alt+<b>moms</b></td>
</tr></table>';

$footer = '<table class="table-footer"><tr>
<td>Footer here</td>
<td class="td-number"><b>Page N. {PAGENO}</b></td>
</tr></table>';

$mpdf = new mPDF('c','A4','','',15,15,18,15,10,5);
$mpdf->mirrorMargins = 1;
/* Declare headers */
$mpdf->SetHTMLHeader($header);
$mpdf->SetHTMLHeader($header,'E');
/* Declare footers */
$mpdf->SetHTMLFooter($footer);
$mpdf->SetHTMLFooter($footer,'E');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$mpdf->Output();
Другие вопросы по тегам