mPDF - показывать нижний колонтитул (tfoot) только один раз - PullRequest
0 голосов
/ 03 июля 2018

Я создаю файл PDF из таблицы HTML, используя Расширение Kartik mPDF для Yii2 . Нижний колонтитул таблицы виден на всех страницах, но я хочу, чтобы он отображался только в конце всей таблицы (на последней странице).

Как мне этого добиться? Я использую GridView и ArrayDataProvider для создания таблицы.

display: table-row-group; не поддерживается mPDF для tfoot элемента и поэтому не работает внутри PDF.

1 Ответ

0 голосов
/ 04 июля 2018

Я пришел к решению, которое требует изменения таблицы.

Вместо использования элемента tfoot для нижнего колонтитула я просто добавляю одну строку с данными нижнего колонтитула внутри tbody и добавляю к ней стилизацию. Поскольку mPDF не поддерживает селектор :last-child, мне пришлось использовать поддерживаемый селектор :nth-child():

$pdf->cssInline = 'tbody tr:nth-child(' . $row_count . ') td { font-weight: bold; }';

Я установил $row_count после добавления дополнительной строки, вызвав count() в массиве данных. Чтобы отобразить правильное общее количество элементов в GridView, я добавил пользовательский макет со значением $row_count минус 1:

$pdf->content = GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => $this->columns,
    'showFooter' => false,
    'layout' => '
        <div>' . Yii::t('app', 'Total <strong>{count}</strong> items.', ['count' => ($this->row_count - 1)]) . '</div>
        {items}
    '
]);

Полученный файл PDF имеет правильное количество элементов перед таблицей и правильно оформлен «нижний колонтитул» только в самом конце таблицы.

Надеюсь, мое решение будет полезным для кого-то другого. Пожалуйста, оставьте ответ, если вы нашли лучшее решение.

...