我正在为一个软件编写一个插件,它可以收集大量的项目,并将它们弹出到Cocoa WebView中的HTML中(它使用WebKit作为它的渲染器,所以基本上你可以假设这个HTML文件是在Safari中打开的)。

它生成的div具有动态高度,但变化不大。它们通常在200px左右。不管怎样,每个文档大约有600个这样的项目,我很难把它打印出来。除非我很幸运,否则每页的底部和顶部都有一个条目被切成两半,这使得实际使用打印输出非常困难。

我尝试过前破页、后破页、内破页,三种方法的组合都没有用。我认为可能是WebKit没有正确地呈现指令,或者可能是我对如何使用它们缺乏理解。无论如何,我需要帮助。如何防止打印时DIVs减半?


当前回答

我也不得不处理wkhtmltopdf。

我使用Bootstrap 3.3.7作为框架,需要避免在.row元素上分页。

我使用这些设置完成了工作:

.myContainer {
    display: grid;
    page-break-inside: avoid;
}

不需要用@media print来包装

其他回答

在我的案例中,我通过设置我所选择的div为page-break-inside:avoid,并将所有元素设置为display:inline来解决webkit中的分页困难。就像这样:

@media print{
* {
    display:inline;
}
script, style { 
    display:none; 
}
div {
    page-break-inside:avoid;
}

}

似乎page-break-properties只能应用于内联元素(在webkit中)。我试着只对我需要的特定元素应用display:inline,但这不起作用。唯一有效的方法是将内联应用于所有元素。我猜是一个大容器div'把事情搞砸了。

也许有人可以对此进行详细解释。

@media print{
    /* use your css selector */    
    div{ 
        page-break-inside: avoid;
    }
}

这个解决方案适用于所有新浏览器。看到搜索= page-break-inside caniuse.com/ #

我在使用Bootstrap时遇到了这个问题,我在每一行中都有多列。

我试着给page-break-inside: avoid;或破门而入:避免;到col-md-6 div元素。这是行不通的。

我从上面DOK给出的答案中得到了一个提示,浮动元素与page-break-inside不能很好地工作:避免;。

相反,我不得不给出“page-break-inside”:avoid;或破门而入:避免;到<div class="row">元素。打印页面中有多行。

也就是说,每行只有两列。而且它们总是水平贴合,不会缠绕在新的线条上。

在另一个例子中,如果您希望每行有4列,那么使用col-md-3。

可能的page-break-after值有:auto、always、avoid、left、right

我认为你不能在绝对定位的元素上使用page-break-after属性。

只有一个部分的解决方案:我能让它在IE中工作的唯一方法是将每个div包装在它自己的表中,并在表中设置分页内以避免。