Перекрытие содержимого и нижнего колонтитула в mPDF - PullRequest
0 голосов
/ 13 октября 2019

Я создаю PDF с помощью mPDF. Обычно PDF - это одна, две или три страницы.

Там есть заголовок, затем содержимое, а затем часть, где у меня есть проблема, нижний колонтитул. Все страницы имеют одинаковый нижний колонтитул, кроме последней, которая добавляет некоторую информацию (например, итоги, налоги и т. Д., Поскольку это счет-фактура).

<htmlpagefooter name="myfooter">
    <div style="border-top: 1px solid #888888; font-size: 9pt; text-align: center; padding-top: 3mm; ">
        <div style="text-align: center; font-style: italic; font-size:11px;">Some text</div>
        <br/>
        <div style="text-align: center; font-style: italic; font-size:11px;">Page {PAGENO} of {nb}</div>
    </div>
</htmlpagefooter>
<sethtmlpagefooter name="myfooter" value="on" />

<htmlpagefooter name="LastPageFooter">
    Some more content that I won't paste because it's too long.
    <div style="border-top: 1px solid #888888; font-size: 9pt; text-align: center; padding-top: 3mm; ">
        <div style="text-align: center; font-style: italic; font-size:11px;">Some text</div>
        <br/>
        <div style="text-align: center; font-style: italic; font-size:11px;">Page {PAGENO} of {nb}</div>
    </div>
</htmlpagefooter>

mpdf-->

Это создает 2 нижних колонтитула и добавляет тот, который называется «myfooter». Затем в конце документа есть эта строка, которая вместо добавления нижнего колонтитула «myfooter» добавляет «LastPageFooter».

<sethtmlpagefooter name="LastPageFooter" value="1" />

Я также попытался удалить эту строку и добавить следующую

$footer = 'the footer content';
$mpdf->WriteHTML($html);
$mpdf->SetHTMLFooter($footer);

Все работает, за исключением случаев, когда содержимое последней страницы слишком длинное (не имеет значения, является ли файл PDF одной или несколькими страницами). Содержание и нижний колонтитул перекрываются. Я предполагал, что это создаст другую страницу только с этим нижним колонтитулом, но это не так.

После прочтения документации и поиска в Google я нашел

$mpdf->setAutoBottomMargin = 'stretch';

и

$mpdf->setAutoBottomMargin = 'pad';

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

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

Edit:

После повторной попытки свойство setAutoBottomMargin создает только новую страницугде нижний колонтитул напечатан правильно, если я настроил его в конструкторе Mpdf следующим образом:

$mpdf = new \Mpdf\Mpdf([
                'margin_left' => 5,
                'margin_right' => 5,
                'margin_top' => 40,
                'margin_bottom' => 25,
                'margin_header' => 10,
                'margin_footer' => 10,
                'setAutoBottomMargin' => 'pad'
            ]);

Редактирование еще раз:

Похоже, что я сделал некоторую ошибку ранее, и это работает с последней настройкой Iвыложил но не без проблем. Если PDF-файл содержит более одной страницы, он оставляет большой белый пробел между контентом и нижним колонтитулом, как показано на следующем рисунке: большой белый пробел

Его можно уменьшить, изменив свойство 'margin_bottom '=> 25 к чему-то вроде' margin_bottom '=> 5. Это работает. Он показывает еще 3 строки перед переходом на следующую страницу, но содержимое и нижний колонтитул снова перекрываются на последней странице.

...