WeasyPrint:每个PDF页面上长表格重叠固定页脚标签

7

我使用Django生成了一个表格,并通过WeasyPrint将其呈现为pdf。

这个表格可能会非常长(指行数),因此可能会在多页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,但没有成功。谢谢。

你有没有找到解决方案? - Leah Sapan
如果我没记错的话,我使用了一个非常丑陋的经验法解决方案。我注意到渲染的PDF每页可以显示大约40行(我的表格行是一致的,至少如此)。使用Django模板引擎,我可以像这样使用for循环(伪代码):对于每一行line in lines 渲染line 如果forloop.counter == 40 关闭表格(</table>)和<br>任何时候需要为固定页脚腾出空间 重新打开一个表格 结束for循环 - yoLotus
抱歉格式可能有些混乱,而且我的代码已经不在手边了,我也已经退出这个项目超过6个月了。不过,你明白我的想法了吗? - yoLotus
是的,这正是我之前考虑过的做法,但经过一些研究后,我决定使用wkhtmltopdf,因为它支持“page-break-inner: avoid”。谢谢! - Leah Sapan
不用谢,我会看一下 wkhtmltopdf。 - yoLotus
1个回答

15

我找到了解决方案。

首先你需要定义你的页面边距:

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

我的顶部和底部边距为15毫米。

当您在页面/主体中放置一个固定的页脚时,它将位于这些边距的“内部”,非 固定元素将覆盖它。因此,您想要做的是将固定的页脚“移动”到这些边距的“外部”:

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

fixedbottom属性会将您的页脚放置在每个页面的底部,但在定义的边距内(被重叠)。 height指定页脚的高度,然后通过负的margin-bottom属性向“外”移动。只需确保margin-bottomheight

祝好 Domi


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接