mPDF:page-break-before:avoid;

时间:2018-04-23 15:31:53

标签: php mpdf

如何为第一个 h1 获取mPDF(版本7)到而不是分页符? 我已经在为this reason使用AddPageByArray。

$mpdf->AddPageByArray([
    'margin-left' => '15mm',
    'margin-right' => '20mm',
    'margin-top' => '15mm',
    'margin-bottom' => '15mm',
]);

$html = "
<style type='text/css'>
h1 { page-break-before:always; }
h1:first-child { page-break-before:avoid; }
</style>
<h1>Heading 1</h1>";

结果是第二页空白,我正在努力避免。

2 个答案:

答案 0 :(得分:0)

:first-child伪选择器不是mPDF(see the supported CSS in the mPDF documentation)中支持的元素。相反,您需要在第一个H1上设置内联样式(或者给它一个类并为第一个H1分配一个类)

$mpdf->AddPageByArray([
    'margin-left' => '15mm',
    'margin-right' => '20mm',
    'margin-top' => '15mm',
    'margin-bottom' => '15mm',
]);

$html = "
<style type='text/css'>
h1 { page-break-before:always; }
.no-page-break { page-break-before: inherit; }
</style>
<h1 style='page-break-before: inherit'>Heading 1</h1>
<h1 class='no-page-break'>Heading 1</h1>
<h1>Heading 1 on a new page</h1>";

从技术上讲,inherit不是mPDF中的有效属性,但它会取消设置always属性。

答案 1 :(得分:0)

我今天遇到了这个错误。除了始终之外,我找不到page-break-before的值,该值没有引发mdf当前索引错误。我可以使它起作用的唯一方法是为我要样式化的元素的第一个匹配项创建一个类,然后为其余元素设置一个不同的类。首先,我使用SaaS进行了以下操作(您可以使用直接的CSS,但是您必须在两个类之间重复样式,这有点混乱):

%heading {
    /* add all of the heading styling here... */
}

.heading--first {
    @extend %heading;
}

.heading {
    @extend %heading;
    page-break-before: always;
}

然后HTML看起来像这样:

<h1 class="heading--first">..</h1>
<h1 class="heading">..</h1>
<h1 class="heading">..</h1>

这不是一个完全优雅的解决方案,但是我找不到更好的解决方法,它可以工作。我希望这会有所帮助。