CSS 分页后在 Chrome 中有偶数页

CSS page-break-after to have even pages in Chrome

我正在处理一项任务,准备 HTML 文档以在 Chrome 中打印(要求),该文档将包含未指定数量的未指定长度的文本元素。文件需要双面打印,元素之间不能混用。因此,每当文本跨越奇数页时,需要包含一个额外的空白页。

到目前为止,我已经阅读了很多关于 page-break-beforepage-break-after CSS 元素的内容,它们应该可以完成我需要的工作。然而,它们似乎不符合 Chrome 中的规范。我注意到它可能是一个众所周知的问题,但还没有找到合适的解决方法。

我创建了以下 CSS:

@media print {
  .block {
    font-family: Arial, Helvetica, sans-serif;
    page-break-after: right;
    display: block;
    float: none;
    position: relative;
  }
}

当我在 Edge (44.18362.449.0) 中尝试时,它似乎按我的需要插入空白页 - 测试输出有 17 页,其中第 6 页和第 12 页完全空白。但是我的 Chrome (85.0.4183.121) 没有做同样的事情——这里进行了分页,但一次只有一个,所以下一个 div 从偶数页开始,这是错误的我的情况。

带有一些 lorem-ipsum 测试数据的简单演示代码:https://codesandbox.io/s/inspiring-wing-rtwbn?file=/test.css

您一定要记住,大多数浏览器不正确支持 page-break 属性。查看 caniuse 报告。

此外,here 是可能对您有帮助的问题,它已经有一些很好的答案。

用我自己的评论复制这里的主要建议。也许,您可以混合使用它们中的每一个。

1 号。(@Nils)

您可以尝试将每个报告包装在 div 中,然后使用 jQuery 之类的东西计算出 divheight 以找出是否在奇数页结束。

如果它在奇数页结束,然后用你的 page-break-after class 插入一个空的 div 以便它进入下一页。

显然,这只有在您知道您的页面在目标打印机上打印的 dpi 时才会真正起作用。没有适用于所有情况的神奇答案。

  • 72 dpi(网络)= 595 X 842 像素
  • 300 dpi(打印)= 2480 X 3508 像素 ("210mm X 297mm @ 300 dpi")
  • 600 dpi(打印)= 4960 X 7016 像素

您需要在此处对标准打印机设置进行一些试验,以了解哪些适用于 you/your 客户端。如果有多个场景,你可以让他们 select 来自 drop-down.

所以你会使用 jquery 检查 div 的像素高度,对照页面的像素高度检查它,看看 div 是否以奇数结尾或偶数页 - 如果报告在奇数页结束,则插入分页符。

您还需要预先知道用户是否将使用双面打印 - 因为您只需要为双面打印执行此操作。

2号。(@spekary)

在需要的地方使用手册的内联样式page-breaking。

<div style="page-break-after: right">
    <!-- your content -->
</div>

但是,您应该记住,这并不能完全解决您的问题,因为正如您所说,文档

will contain unspecified number of text elements of unspecified length.

不过,也许您可​​以试试这个解决方案。