如何应用CSS分页符来打印包含大量行的表?

Moh*_*eri 72 html css printing page-break css-tables

我的网页中有一个动态表,有时包含很多行.我知道有page-break-beforepage-break-afterCSS属性.如果需要,我在哪里将它们放入我的代码中以强制分页?

Hem*_*lia 120

您可以使用以下内容:

<style type="text/css">
   table { page-break-inside:auto }
   tr    { page-break-inside:avoid; page-break-after:auto }
</style>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅W3C的CSS打印配置文件规范.

还可以参考Salesforce开发人员论坛.

  • 这不适用于Safari(6)或Chrome(24):( (13认同)
  • 如果你正在尝试使用像bootstrap这样的框架,请注意使用类似.spanX(使用float的样式)这样的东西可能会破坏page-break-*属性,自己会浪费很多时间来处理这个小小的细微差别. (8认同)
  • 适用于Chrome v30 (2认同)
  • 该解决方案不会在其单元边界之间干净地破坏多线单元,而是在中间将它们分开.我找到了一个解决方案,适用于所有当前浏览器(Safari,FF和Chrome):/sf/answers/3324914281/ (2认同)

Adi*_*att 19

无论你想在哪里申请休息,要么是table或者tr,你需要为前一个课程.page-break使用CSS,如下所述:

/* class works for table row */
table tr.page-break{
  page-break-after:always
} 

<tr class="page-break">

/* class works for table */
table.page-break{
  page-break-after:always
}

<table class="page-break">
Run Code Online (Sandbox Code Playgroud)

它会按你的要求工作

或者,您也可以具有div相同的结构:

CSS:

@media all {
 .page-break  { display: none; }
}

@media print {
 .page-break  { display: block; page-break-before: always; }
}
Run Code Online (Sandbox Code Playgroud)

DIV:

<div class="page-break"></div>
Run Code Online (Sandbox Code Playgroud)

  • 这只有在您提前知道页面上适合的行数时才有效(因为您必须直接在标记中声明分页符).如果表格行中的数据可能会换行到第二行,则可能很难(或不可能).那么多页面大小(A4 vs US Letter vs US Legal)呢? (16认同)
  • 无法在 Chrome v64 中使用破坏性的 `tr`。 (2认同)

小智 13

我已经四处寻找解决方案.我有一个jquery移动网站,它有一个最终的打印页面,它结合了几十页.我尝试了上面的所有修复,但我唯一可以工作的是:

<div style="clear:both!important;"/></div>
<div style="page-break-after:always"></div> 
<div style="clear:both!important;"/> </div>
Run Code Online (Sandbox Code Playgroud)


Jay*_*y1b 8

不幸的是,上面的例子在Chrome中对我不起作用.

我提出了以下解决方案,您可以在其中指定每页的PX中的最大高度.当行等于该高度时,这将把表拆分成单独的表.

$(document).ready(function(){

    var MaxHeight = 200;
    var RunningHeight = 0;
    var PageNo = 1;

    $('table.splitForPrint>tbody>tr').each(function () {

        if (RunningHeight + $(this).height() > MaxHeight) {
            RunningHeight = 0;
            PageNo += 1;
        }

        RunningHeight += $(this).height();

        $(this).attr("data-page-no", PageNo);

    });

    for(i = 1; i <= PageNo; i++){

        $('table.splitForPrint').parent().append("<div class='tablePage'><hr /><table id='Table" + i + "'><tbody></tbody></table><hr /></div>");

        var rows = $('table tr[data-page-no="' + i + '"]');

        $('#Table' + i).find("tbody").append(rows);
    }
    $('table.splitForPrint').remove();

});
Run Code Online (Sandbox Code Playgroud)

您还需要在样式表中使用以下内容

    div.tablePage {
        page-break-inside:avoid; page-break-after:always;            
    }
Run Code Online (Sandbox Code Playgroud)