WeasyPrint: исправлен тег нижнего колонтитула, перекрывающийся длинной таблицей на каждой странице PDF.

Я создаю с помощью Django таблицу, которую я отображаю в формате pdf благодаря WeasyPrint.

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

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

<table>
    <tr></tr> <!-- a lot of rows, potentially spreading on several A4 pages -->
</table>

<footer style="position: fixed"> <!-- footer contents will be repeated and overlapped on each page until </table> is not reached -->

</footer>

Я пытался использовать правила css в качестве padding-bottom для тега таблицы, но безуспешно

Благодарность


person yoLotus    schedule 18.05.2015    source источник
comment
Вы когда-нибудь находили решение этой проблемы?   -  person Luke Sapan    schedule 15.01.2016
comment
Если я хорошо помню, я использовал очень уродливое эмпирическое решение. Я заметил, что каждая страница отображаемого PDF-файла может отображать около 40 строк (по крайней мере, строки моей таблицы были постоянными). С механизмом шаблонов Django я мог бы использовать цикл for, например (в псевдокоде): для строки в строках отображать строку, если forloop.counter == 40 закрыть таблицу (‹/table›) и ‹br› в любое время, когда вам нужно освободить место для фиксированный нижний колонтитул повторно открывает конец таблицы endif endfor   -  person yoLotus    schedule 15.01.2016
comment
извините за форматирование и нечеткий ответ, у меня больше нет кода, и я ушел из этого проекта более 6 месяцев назад. Тем не менее, вы поняли мою мысль?   -  person yoLotus    schedule 15.01.2016
comment
Да, это то, что я думал сделать раньше, но после некоторых исследований я собираюсь просто использовать wkhtmltopdf, потому что он поддерживает page-break-inner: avoid. Спасибо!   -  person Luke Sapan    schedule 15.01.2016
comment
пожалуйста, и я посмотрю на wkhtmltopdf.   -  person yoLotus    schedule 15.01.2016


Ответы (1)


Я нашел решение для него.

Прежде всего, вы должны определить поля страницы:

@page {
    size: A4;
    margin: 15mm 20mm;
}

У меня верхнее и нижнее поле 15 мм.

Теперь, когда вы поместите фиксированный нижний колонтитул на страницу/тело, он будет «внутри» этих полей, и элементы, отличные от fixed, будут перекрывать его. Итак, что вы хотите сделать, это переместить фиксированный нижний колонтитул «за пределы» этих полей:

footer
{
    position        : fixed;
    right           : 0;
    bottom          : 0;
    margin-bottom   : -10mm;
    height          : 10mm;
    text-align      : right;
    font-size       : 10px;
}

Свойства fixed и bottom будут размещать нижний колонтитул на каждой странице внизу, но в пределах заданных полей (где он перекрывается). height указывает высоту нижнего колонтитула, которая затем перемещается «за пределы» полей отрицательным свойством margin-bottom. Просто убедитесь, что margin-bottom >= height.

Ура Доми

person Dominique Barton    schedule 14.07.2016