Разрыв страницы Wkhtmltopdf в таблице с rowspan нарушает переполнение стека, охватывающего строки

#html #laravel #wkhtmltopdf

#HTML #laravel #wkhtmltopdf wkhtmltopdf

Вопрос:

Я использую Laravel 8, Snappy и wkhtmltopdf 0.12.4 (с исправленным qt). Я сгенерировал HTML-таблицу со следующей структурой:

 <table class="table table-bordered">
    <thead>
        <tr>
            <td>Col 1</td>
            <td>Col 2</td>
            <td>Col 3</td>
            <td>Col 4</td>
            <td>Col 5</td>
            <td>Col 6</td>
            <td>col 7</td>
            <td>col n</td>
            <td>col n 1</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td rowspan="13">Title 1</td>
            <td rowspan="13">Sub-title 1</td>
            <td> x </td>
            <td></td>
            <td> 10.5-12 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    12.260
                </a>
            </td>
            <td>
                <a href="#">
                    12.300
                </a>
            </td>
        </tr>
        <tr>
            <td> y</td>
            <td> mgE/l </td>
            <td></td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    0.080
                </a>
            </td>
            <td>
                <a href="#">
                    0.080
                </a>
            </td>
        </tr>
        <tr>
            <td> z </td>
            <td> mmol/l </td>
            <td> 0.04 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    0.040
                </a>
            </td>
            <td>
                <a href="#">
                    0.040
                </a>
            </td>
        </tr>
        <tr>
            <td> a </td>
            <td> mgE/l </td>
            <td></td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    20.800
                </a>
            </td>
            <td>
                <a href="#">
                    23.300
                </a>
            </td>
        </tr>
        <tr>
            <td> b </td>
            <td> mgE/l </td>
            <td> 25 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    23.500
                </a>
            </td>
            <td>
                <a href="#">
                    26.400
                </a>
            </td>
        </tr>
        <tr>
            <td> c </td>
            <td> mg/l </td>
            <td></td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    129.000
                </a>
            </td>
            <td>
                <a href="#">
                    148.000
                </a>
            </td>
        </tr>
        <tr>
            <td> d </td>
            <td> mg/l </td>
            <td> amp;< 0.3 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    0.430
                </a>
            </td>
            <td>
                <a href="#">
                    1.230
                </a>
            </td>
        </tr>
        <tr>
            <td> e </td>
            <td> μS/cm </td>
            <td> amp;< 8000 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    5320.000
                </a>
            </td>
            <td>
                <a href="#">
                    5960.000
                </a>
            </td>
        </tr>
        <tr>
            <td> f </td>
            <td> bar </td>
            <td></td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td> g </td>
            <td></td>
            <td> miss </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    miss
                </a>
            </td>
            <td>
                <a href="#">
                    miss
                </a>
            </td>
        </tr>
        <tr>
            <td> h </td>
            <td></td>
            <td> miss </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    value
                </a>
            </td>
            <td>
                <a href="#">
                    value
                </a>
            </td>
        </tr>
        <tr>
            <td> i </td>
            <td></td>
            <td> miss </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    miss
                </a>
            </td>
            <td>
                <a href="#">
                    miss
                </a>
            </td>
        </tr>
        <tr>
            <td> j </td>
            <td></td>
            <td> miss </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    miss
                </a>
            </td>
            <td>
                <a href="#">
                    miss
                </a>
            </td>
        </tr>
        <tr>
            <td rowspan="13">Title 2</td>
            <td rowspan="13">Sub-title 2 </td>
            <td> k </td>
            <td></td>
            <td> 10.5-12 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    11.420
                </a>
            </td>
            <td></td>
        </tr>
        <tr>
            <td> l </td>
            <td> mgE/l </td>
            <td></td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    0.000
                </a>
            </td>
            <td></td>
        </tr>
        <tr>
            <td>m</td>
            <td> mmol/l </td>
            <td> 0.04 </td>
            <td>
                <span>N/A</span>
            </td>
            <td></td>
            <td>
                <a href="#">
                    amp;<0.010
                </a>
            </td>
            <td></td>
        </tr>
    </tbody>
</table>
 

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

Комментарии:

1. Может tr { break-inside:avoid; } быть, помогает

2. Пробовал это, также пробовал break-before:avoid; все строки, кроме тех, которые содержат td с rowspan, но безуспешно.

3. tr, td, a, span { break-inside:avoid; } ??

4. Спасибо за предложение, но нет, все равно ломается внутри первого td строки.

5. Возможно, это связано с количеством ячеек в строке… У первого tr есть 9 td , а у большинства других — 7.