我如何建立一个用于打印的网页,这样它就不会在页面上严重分开?

时间:2020-03-06 15:04:13  来源:igfitidea点击:

我有一个生成长报告的Web应用程序,需要打印它。如果仅打印页面,它将在物理页面的末尾中断。如何计算要在网页上中断的位置,以便在打印时分页与物理页对齐?

解决方案

  • 分页媒体
  • 分页前(MDN)
  • 页内闯入(MDN)

我通常避免同时打印网页(HTML)。如果需要格式化打印,我会生成PDF或者CSV /电子表格格式,供我的客户以他们想要的任何方式打印。

我通常会生成供全球使用的打印件,这意味着各个工作场所的所有类型的设置都不同(例如,纸张大小:Legal,Letter,A4等)。我发现这是一项太大的任务,无法保证到处都有美观的输出。

使用CSSpage-break-before / after

其他方法:

  • 使用JasperReports并将数据加载到报告而不是html页面中
  • 结合使用带有XSL的Apache FOP将HTML(或者原始数据)转换为FOP,然后再转换为PDF

两种方法都相当广泛,因此,如果我们不想花更多的精力,可以直接跳到另一个答案...。

有一个css属性可尝试确保分页符的位置。我们可以为元素指定规则" page-break-before:always"或者" page-break-after:always",以指示中断应该在元素之前还是之后。这在所有浏览器中的支持都非常差,我不会依赖它。有关更多详细信息,请参见http://www.w3schools.com/CSS/pr_print_pageba.asp。

我们有一个系统,可以打印出选定订单的发票,

<br style="page-break-before:always;">

每张发票之间。这意味着每张发票都会在新页面上显示。

使用打印样式表也是一个好习惯

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

可以隐藏/显示页面的相关区域。当有人想要实际的页面内容时,毫无意义地打印出leftnav链接等。