使用javascript-Chrome,Firefox,IE9及以上版本打印时出现分页问题

时间:2014-10-23 07:19:04

标签: javascript jquery css angularjs printing

我有一个使用window.print()打印html表的应用程序,当我点击打印超链接时应用程序工作正常,我面临的问题是分页,我已经护目镜并找到了很多解决方案,他们中的大多数使用css来解决问题,但是当我尝试下面显示的css时它不起作用。我在JS-Fiddle中模拟了一个示例演示,以显示问题

在Chrome中测试它,以便人们可以看到预览并使用页面大小作为A4来查看分页符。

enter image description here

JSFiddle

@media print {
    body * {
        visibility: hidden;
    }
    div {
        page-break-inside: avoid;
    }
    table {
        page-break-after: always;
        page-break-inside: auto;
    }
    tr {
        page-break-inside: avoid;
        page-break-after: auto;
    }
    td {
        page-break-inside: avoid;
        page-break-after: auto;
    }
    thead {
        display: table-header-group;
    }
    tfoot {
        display: table-footer-group;
    }

    #printSection * {
        visibility: visible;
    }
    #printSection {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        margin: 0 auto;
        width: 100%;
    }
}

3 个答案:

答案 0 :(得分:1)

试试这个小提琴

jsfiddle.net/w2p5kbcj/14

CSS

@media screen {
    #printSection {
        display: none;
    }
}
@media print {
    table {
        page-break-after: auto;
        page-break-inside: auto;
        width:100%;
        border-width: 1px solid #000;
        font-size:16px;
        font-family:Arial;
    }

     td{
        padding:2px 5px 2px 5px;
    }

}

引用旧堆栈溢出线程

How to deal with page breaks when printing a large HTML table

用于此目的的Javascript

https://github.com/AAverin/JSUtils/blob/master/wkhtmltopdfTableSplitHack/wkhtmltopdf_tableSplitHack.js

只需将js添加到您的代码中,并将类“splitForPrint”添加到您的表中,它就会将表格整齐地分成多个页面,并将表格标题添加到每个页面。

答案 1 :(得分:1)

@media print {
  .page-break  { display: none; page-break-before: avoid; }
}

这可确保打印机永远不会看到分页符。

<div class="page-break"></div>

答案 2 :(得分:0)

我有完全相同的问题。唯一有效的方法是使用table更改div

因此,您可以使用div > div > div代替table > tr > td,并使用css显示表格:

div(style: display: table;)
    > div(style: display: table-row;)
        > div(style: display: table-cell;)

<强>更新

并非所有浏览器都支持这样的属性:page-break-after: always;。甚至Chrome也忽略了它。如果它适用于您,请尝试该布局。


更新2

即使它不适合你(无论如何,我记得它有效),通过这种布局,您可以轻松地在media print中使用它,就像这样:

@media print {
    div > div {
        display: block;

        > div {
              display: inline-block;
        }
    }
}

您可以使用.table类更改第一个div,然后继续。查看示例:https://github.com/nikoloza/Scratch/blob/master/scratch/less/core/classes.less#L83