欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

避免在表格行内部分页跨页打印 有大用

当我通过wkhtmltopdf将html转换为PDF时,我想避免在html中的表行内部分页。我使用page-break-inside:避免使用table-它的工作,但我有很多行, 然后不行。 如果设置显示 tr作为块或其他东西然后它改变表的格式 并插入双边框。 或者可以在分割表的每个页面上插入表头。


 68
 2018-02-15 06:22



起源



对不起,使用时有什么问题 page-break-inside: avoid;? - Christian Varga
@ChristianVarga当我使用page-break-inside时:避免使用tr,这是行不通的 - Ankit Mittal
打破表格的页面非常错误。看看这个JavaScript解决方法 code.google.com/p/wkhtmltopdf/issues/detail?id=168#c4 - Jona
实际上我已经尝试过 page-break-inside:avoid 所有的表元素,如tr td,但它不起作用。 - Ankit Mittal
Yay Google for WebGL,快速javascript,可移植的原生客户端,但我们仍然无法打印数据表。谁需要那样做?只有世界上每一个企业。顺便说一句,我刚刚尝试在谷歌文档中打印电子表格,它一直崩溃我的铬。我认为谷歌文档通过pdf打印。 :/ - Sam Watkins



答案:


您可以尝试使用CSS:

<table class="print-friendly">
 <!-- The rest of your table here -->
</table>

<style>
    table.print-friendly tr td, table.print-friendly tr th {
        page-break-inside: avoid;
    }
</style>

大多数CSS规则不适用于 <tr> 标签直接,因为你正是上面提到的 - 他们有一个独特的 display 样式,不允许这些CSS规则。但是,那 <td> 和 <th> 通常在他们内部的标签  允许这种规范 - 您可以轻松地将这些规则应用于所有儿童 - <tr>和 <td>如上所示使用CSS。


 54
 2017-08-08 23:00




不幸的是,这还没有(使用)基于webkit的浏览器。 - Attila Fulop
是的 - 有一些奇怪之处。请参阅@ Peter在这个问题中给出的答案: stackoverflow.com/questions/7706504/... 了解更多信息。 - Troy Alford
它只适用于整个表,而不仅仅是tr / td: stackoverflow.com/a/13525758/729324 - marcovtwout
不适用于dompdf - userlond
@AttilaFulop还在吗?你的帖子是3岁,我仍然无法上班。谢谢 - relipse



我发现在webkit浏览器中处理这个问题的最好方法是在每个td元素中放入一个div并应用page-break-inside:避免使用div的样式,如下所示:

...
<td>
  <div class="avoid">
    Cell content.
  </div>
</td>
...
<style type="text/css">
  .avoid {
    page-break-inside: avoid !important;
    margin: 4px 0 4px 0;  /* to keep the page break from cutting too close to the text in the div */
  }
</style>

即使Chrome认为不能识别'page-break-inside:avoid;'在使用wktohtml生成PDF时,这似乎可以防止行内容被分页。 tr元素可能会暂停在页面中断,但div和其中的任何内容都不会。


 25
 2017-07-31 22:30




该 margin: 4px 0 4px 0; 为我做了伎俩,我偶尔会失去一个记录。谢谢 - Wartodust
铬合金49.0.2623.87米对我不起作用 - Dvir
这种方法的一个问题是,有时只有一行中的一些单元被打破到下一页,尽管每个单元本身都不会被破坏。 - WorldSEnder
@WorldSEnder是的。你找到了解决这个问题的方法吗? - ranjansaga
不起作用。什么都行不通。我尝试了互联网上的每一个“解决方案”,但没有解决方案。我们只需接受甚至无法呈现表格的垃圾软件。 - Niklas Rosencrantz



我使用@AaronHill上面的4px技巧(链接)它工作得很好! 我使用了一个更简单的css规则,而不需要为每个添加一个类 <td> 在表中。

@media print {
    table tbody tr td:before,
    table tbody tr td:after {
        content : "" ;
        height : 4px ;
        display : block ;
    }
}


 14
 2017-07-14 13:42




不适用于dompdf - userlond
@phidias,谢谢代码,解决了我的问题 - sergiodebcn
它不起作用。 - Niklas Rosencrantz



我根据Aaron Hill的回答编写了以下JavaScript:

//Add a div to each table cell so these don't break across pages when printed
//See http://stackoverflow.com/a/17982110/201648
$(document).ready(function () {
    var ctlTd = $('.dontSplit td');
    if (ctlTd.length > 0)
    {
        //console.log('Found ctlTd');
        ctlTd.wrapInner('<div class="avoidBreak" />');
    }
});

哪里 dontSplit 表是您不希望td跨页面拆分的表的类。使用以下CSS(再次归因于Aaron Hill):

 .avoidBreak {
    page-break-inside: avoid !important;
    margin: 4px 0 4px 0;  /* to keep the page break from cutting too close to the text in the div */
  }

这似乎在最新版本的Chrome中运行良好。


 7
 2017-09-12 00:27




我使用wkhtmltopdf将大表格渲染成PDF格式,这是唯一能产生可接受结果的解决方案。它可能会更好(Webkit在分页后不会重复单元格边框),但至少内容是存在的。谢谢! - Jonathon Hill



使用CSS page-break-inside不起作用(这是一个webkit浏览器问题)。

有一个wkhtmltopdf JavaScript表拆分黑客根据你指定的页面大小自动将长表分成较小的表(而不是在x行的静态值之后的页面中断): https://gist.github.com/3683510


 6
 2018-01-02 16:55




Javascript黑客对我来说效果不好。 - Jonathon Hill
如果我只想要没有wkhtmltopdf的打印网页,这个js hack会有效吗? - 120196



我发现工作的唯一方法是将每个TR元素放在它自己的TBODY元素中,并通过css将分页规则应用于TBODY元素


 5
 2017-11-30 02:34




在Arch Linux上的Chromium Version 40.0.2214.111(64位)上,这比我的其他功能更好。它很丑陋而且感觉很笨拙 - 但显然是多重的 tbody 元素在一个内部有效 table  stackoverflow.com/questions/3076708/... - ElDog
这对我不起作用(Chrome 56.0.2924.87(64位),Mac OS 10.12.2)。 - Nhat Dinh



试试吧

white-space: nowrap; 

风格到td,以避免它在新线上打破。


 3
 2017-10-03 14:19




比其他解决方案简单得多。这是新事吗? - bendecko



我找到了解决这个问题的新方法,至少对我来说(MacOS Sierra上的Chrome版本63.0.3239.84(官方版本)(64位))

将CSS规则添加到父表:

table{
    border-collapse:collapse;
}

并为td:

tr td{
    page-break-inside: avoid;
    white-space: nowrap;
}

我实际上在Stack Overflow上找到了这个解决方案,但它没有出现在最初的Google搜索中: CSS停止表行内的分页符

感谢@ Ibrennan208解决问题!


 3
 2018-01-10 21:19




来自  http://landcareweb.com/questions/4704/bi-mian-zai-biao-ge-xing-nei-bu-fen-ye

普通分类: