【问题标题】:Printing HTML tables without splitting a row across two pages打印 HTML 表格而不在两页之间拆分一行
【发布时间】:2011-09-28 23:58:03
【问题描述】:

我需要从 Internet Explorer(各种版本)和 OS X 上的 Safari 打印 HTML 表格中的一些数据。暂时忽略 Safari。

当打印行数超过一页的表格时,页面上的最后一行通常会与第一页上的部分行和下一页上的其余行分开。

这看起来很难看。有办法避免吗?

我一直在四处寻找,到目前为止我找到了page-break-before: always,但我不确定这是否是我要找的,因为我不知道前面有多少行可以放在页。例如根据内容,行可能更高或更短,并且用户可能正在纵向或横向模式下打印。我假设至少是 A4,但如果用户使用的是美国信函或其他纸张尺寸,则会引入更多不确定性。另外,打印机边距呢?

那么有没有办法解决这个问题?还是我只需要猜测可以容纳多少行并在此之后强制分页?那还能用吗?

【问题讨论】:

    标签: html css internet-explorer printing safari


    【解决方案1】:

    A few simple solutions 确实存在用于防止行内分页符,但它们有一些相当大的限制,往往使它们对除 Intranet 之外的任何东西都无用。

    可以在here 找到更通用的解决方案,只是稍微复杂一点。它的主要缺点是它需要固定的列宽。

    我最喜欢的解决方案要复杂得多,但最终可能会引起最少的麻烦。它使用 JavaScript 将每一行变成一个单独的、牢不可破的块(但不会影响表格的外观)。我发布了一些使用这种技术的答案:

    【讨论】:

    • 这看起来很有希望,谢谢。不过,我不确定什么时候有机会好好看看它。
    【解决方案2】:

    为避免在 Safari 上打印拆分单元格:

    tr
    {
        display: block;
        page-break-inside: avoid;
        -webkit-region-break-inside: avoid; 
    }
    

    【讨论】:

    • 谢谢。你有这方面的参考吗?我已经尝试搜索并发现了多次提及它,但没有确切说明它的作用或它适用于哪些版本以及它是否有望在 Chrome 等上运行。
    • 在 Safari(版本 > 5.0)中,它确实会放大前一个单元格,以便当前单元格从新页面的顶部开始。以这种方式,这个当前单元格不是“分裂”的。文档是here。有 2 个注意事项需要考虑: 1:您不能在绝对定位的元素上使用此属性。 2:尽量少用分页属性,避免分页属性表格内、浮动元素、带边框的块状元素。
    • 谢谢。我的意思是任何专门针对 webkit 的文档,但我想 W3Schools 链接应该没问题。问题是一个大表正是我想要使用这种东西的地方,因为默认情况下 webkit 会随机中断在tr 的中间。
    • 这与行表示相混淆。
    • vicenteherrera:你能详细说明一下吗?我还没有真正尝试过,但是它如何与行的表示混淆,这有什么影响?
    【解决方案3】:

    您可能想玩page-break-before/after: autopage-break-inside 是理想的,但大多数浏览器都使用 not supported

    在这里查看http://www.westciv.com/style_master/academy/css_tutorial/advanced/printing.html 以获得一些有用的信息。

    【讨论】:

    • 感谢 westciv 链接。现在阅读。
    • 好吧,我还没有找到合适的解决方案。 page-break-inside: avoid 似乎在 IE 兼容模式下的 IE8 或 9 上是最好的,但不是在 webbrowser 控件中。有一个注册表项应该覆盖 webbrowser 控件的模式,但它在装有 IE9 的机器上对我不起作用,即使代码在完整浏览器中运行良好。
    • 是的,我过去也遇到过控制问题。这听起来很疯狂,但似乎控件使用的版本与安装的浏览器不同。
    【解决方案4】:

    page-break-inside:avoid怎么样?

    似乎有a lot 谈论这个,但我也发现另一个SO article 提到page-break-before:auto 并应用于每个表格单元格。

    【讨论】:

    • page-break-inside 不被大多数浏览器支持,只有 Opera 完全支持它。
    • 谢谢,在发布之前我没有注意到您所指的 SO 文章,但无论如何我似乎得到了更好的答案 :) 将尝试 page-break-before: auto 看看是否有帮助。
    • page-break-inside: avoid 实际上在 IE 8 兼容模式下适用于 IE 8 和 IE 9。不幸的是,我试图让它在 FileMaker Pro 中嵌入的 WebBrowser 控件(FileMaker 称为 Web 查看器)中工作,而不是直接在 IE 中工作。这似乎在安装 IE 8 时有效,但在安装 IE 9 时无效:(当然它也不适用于早期版本的 Internet Explorer。
    • 在 Chrome 中,page-break-inside 似乎只适用于“块”元素。一种解决方法可能是在每个单元格中使用具有该 css 属性的
      ,o 在单元格的某些内部元素上应用“display:block; page-break-inside:avoid”(如果你在 TR 上尝试最后一个,它弄乱了表格布局)。
    • 截至 2016 年,现在应该可以在最新的浏览器中使用。 Mozilla 开发者网络声称从 Chrome 1.0、Firefox 19、IE 8.0、Opera 7.0 和野生动物园 1.3。 (developer.mozilla.org/en-US/docs/Web/CSS/page-break-inside) 在最近的 Firefox 中对我来说效果很好。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签