从页面禁用浏览器打印选项(页眉、页脚、边距)?任何最新版本的 Chrome 和 Opera,以及 Firefox 48 alpha 1 及更高版本 对于火狐版本,最高可达 48 alpha 1其他浏览器

2022-08-30 01:35:03

我在SO和其他几个网站上看到过这个问题,但大多数都太具体或过时了。我希望有人能在这里提供一个明确的答案,而不是迎合猜测。

有没有办法,无论是CSS还是javascript,当有人在浏览器中打印时更改默认打印机设置?当然,通过“从他们的浏览器打印”,我的意思是某种形式的HTML,而不是PDF或其他一些依赖于插件的哑剧类型。

请注意:

如果某些浏览器提供此功能,而其他浏览器不提供此功能(或者如果您只知道如何为某些浏览器执行此操作),我欢迎特定于浏览器的解决方案。

同样,如果您知道主流浏览器对EVER执行此操作有特定的限制,那也很有帮助,但是一些相当最新的文档将不胜感激。(当XYZ在过去三年中对该策略进行了重大更改时,简单地说“这违反了XYZ的安全策略”并不是很有说服力)。

最后,当我说“更改默认打印设置”时,我并不是说永远,只是针对我的页面,我特指打印边距,页眉和页脚。

我非常清楚CSS提供了更改页面方向以及页边距的选项。众多斗争之一是使用Firefox。如果我将页边距设置为1英寸,它会将其添加到已经放置到位的半英寸中。

我非常想减少客户网站上PDF的使用,但对演示的侵犯(以及缺乏可靠性)是他们的主要关注点。


答案 1

CSS 标准支持一些高级格式设置。CSS 中有一个指令,它启用了一些仅适用于分页媒体(如纸张)的格式设置。请参阅 http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html@page

缺点是不同浏览器中的行为不一致。Safari仍然不支持设置打印机页边距,但所有其他主流浏览器现在都支持它。

使用该指令,您可以指定页面的打印机边距(这与 HTML 元素的正常 CSS 边距不同):@page

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Print Test</title>
    <style type="text/css" media="print">
    @page 
    {
        size:  auto;   /* auto is the initial value */
        margin: 0mm;  /* this affects the margin in the printer settings */
    }

    html
    {
        background-color: #FFFFFF; 
        margin: 0px;  /* this affects the margin on the html before sending to printer */
    }

    body
    {
        border: solid 1px blue ;
        margin: 10mm 15mm 10mm 15mm; /* margin you want for the content */
    }
    </style>
</head>
<body>
  <div>Top line</div>
  <div>Line 2</div>
</body>
</html>

请注意,我们基本上禁用了此处特定于页面的边距,以达到删除页眉和页脚的效果,因此我们在正文中设置的边距将不会用于分页符(如Konrad所评论的那样),这意味着只有当打印的内容只有一页时,它才能正常工作。

这在Firefox 3.6IE 7Safari 5.1.7Google Chrome 4.1中不起作用。

设置@page边距确实在IE 8Opera 10Google Chrome 21Firefox 19中起作用。
尽管在这些浏览器中为您的内容正确设置了页边距,但在尝试解决页眉/页脚的隐藏时,该行为并不理想。

这是它在不同浏览器中的行为方式:

  • Internet Explorer中,此打印的设置中的边距实际上设置为0mm,如果您执行预览,则默认为0mm,但用户可以在预览中更改它。
    您将看到页面内容实际上位置正确,但浏览器打印页眉和页脚以非透明背景显示,因此有效地将页面内容隐藏在该位置。

  • Firefox 较新版本中,它的位置正确,但同时显示页眉/页脚文本和内容文本,因此它看起来像是浏览器页眉文本和页面内容的不良组合。

  • Opera 中,当在标准 css 中使用非透明背景时,页面内容会隐藏页眉,并且页眉/页脚位置与内容冲突。相当不错,但如果将边距设置为一个小值,导致标头部分可见,则看起来很奇怪。此外,页边距设置不正确。

  • Chrome 较新版本中,如果@page边距设置得太小,以至于页眉/页脚位置与内容冲突,则浏览器页眉和页脚将被隐藏。在我看来,这正是它应该如何表现的。

因此,结论是Chrome在隐藏页眉/页脚方面具有最佳的实现方式。


答案 2

任何最新版本的 Chrome 和 Opera,以及 Firefox 48 alpha 1 及更高版本

您可以将页边距设置为太小而无法包含文本的大小,以便禁用此功能(借用敬畏的答案):

@page {
  size: auto;  /* auto is the initial value */
  margin: 0mm; /* this affects the margin in the printer settings */
}
html {
  background-color: #FFFFFF;
  margin: 0px; /* this affects the margin on the HTML before sending to printer */
}
body {
  border: solid 1px blue;
  margin: 10mm 15mm 10mm 15mm; /* margin you want for the content */
}
<ol>
  <li>
    <a href="data:,No Javascript :-(" target="_blank">Middle-click to open in new tab</a>
  </li>
  <li>
    <a href="javascript:print()">Print</a>
  </li>
</ol><!-- Hack to work around stack snippet restrictions --><script type=application/javascript>document.links[0].href="data:text/html;charset=utf-8,"+encodeURIComponent('<!doctype html>'+document.documentElement.outerHTML)</script>

对于火狐版本,最高可达 48 alpha 1

您可以在标签中添加一个 mozNoMarginBoxes 属性,以防止打印 Firefox 添加到页边距的 URL、页码和其他内容。<html>

它在Firefox 29及更高版本中工作。您可以在此处查看差异的屏幕截图,或在此处查看实时示例。

请注意,示例中的属性不需要从边距中删除文本;请参阅 PDF 中的 mozdisallowselectionprint 属性.js做什么?mozDisallowSelectionPrint

其他浏览器

不幸的是,在Internet Explorer中似乎没有办法解决这个问题,因此您必须诉诸PDF或要求用户禁用边距文本。

Safari也是如此。根据@Luiz Perez的评论,最新版本的Safari(8,9.1和10)仍然不支持抑制边距文本。@page

我在Edge上找不到任何内容,也没有可供测试的Windows 10安装。