从页面禁用浏览器打印选项(页眉,页脚,边距)?
我曾经在SO和其他几个网站上看过这个问题,但是其中大多数都是过于具体或者过时的。 我希望有人可以在这里提供一个明确的答案,而不会被炒作。
当用户在浏览器中打印时,有没有办法通过CSS或JavaScript来更改默认的打印机设置? 当然,“从他们的浏览器打印”我的意思是某种forms的HTML,而不是PDF或其他插件依赖MIMEtypes。
请注意:
如果某些浏览器提供了此function,而其他浏览器则不提供(或者您只知道如何为某些浏览器执行此操作),则欢迎使用特定于浏览器的解决scheme。
同样的,如果你知道一个主stream的浏览器对EVER有特殊的限制,这也是有帮助的,但是有些相当新的文档是值得赞赏的。 (当XYZ在过去三年中对上述政策做出重大改变时,简单地说“这违背了XYZ的安全政策”并不是很有说服力)。
最后,当我说“更改默认打印设置”时,我并不意味着永远只为我的页面,我特指打印边距,页眉和页脚。
我非常清楚,CSS提供了更改页面方向以及页边距的选项。 Firefox的许多困难之一是。 如果我将页边距设置为1英寸,则将其添加到已经放置的半英寸。
我非常希望减less我客户网站上PDF的使用,但是主要关心的是呈现方面的侵权(以及缺乏可靠性)。
CSS标准启用一些高级格式。 在CSS中有一个@page
指令,可以启用一些仅适用于分页媒体(如纸张)的格式。 见http://www.w3.org/TR/1998/REC-CSS2-19980512/page.html 。
不利的一面是不同浏览器的行为不一致。 Safari仍然不支持设置打印机页边距,但所有其他主stream浏览器现在都支持它。
使用@page
指令,您可以指定页面的打印机页边距(与HTML元素的常规CSS页边距不同):
<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.6 , IE 7 , Safari 5.1.7或Google Chrome 4.1中不起作用。
在IE 8 , Opera 10 , Google Chrome 21和Firefox 19中设置@页边距的确有效果。
虽然在这些浏览器中为页面页边距设置正确,但是在试图解决页眉/页脚的隐藏方面,这种行为并不理想。
这是如何在不同的浏览器中performance:
-
在Internet Explorer中 ,边距实际上在此打印设置中设置为0毫米,如果您执行“预览”,则默认情况下会获得0毫米,但用户可以在预览中对其进行更改。
您将看到页面内容实际上被正确定位 ,但浏览器打印页眉和页脚以非透明背景显示,因此有效地将页面内容隐藏在该位置。 -
在Firefox新版本中,它的位置正确,但是页眉/页脚文本和内容文本都显示,所以它看起来像浏览器标题文本和页面内容的混合。
-
在Opera中 ,页面内容在标准css中使用非透明背景时会隐藏标题,而页眉/页脚位置与内容冲突。 相当不错,但如果页边距设置为一个小的值,导致页眉部分可见,看起来很奇怪。 此外,页边距设置不正确。
-
在Chrome新版本中,如果页面边距设置得太小以致页眉/页脚位置与内容冲突,则浏览器页眉和页脚将被隐藏。 在我看来,这正是应该如何performance。
所以得出的结论是Chrome在隐藏页眉/页脚方面具有最好的实现。
任何最新版本的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>
正如@Awe上面所说,这是解决scheme,这是确认工作在Chrome!
只要确保这是INSIDE标题标签:
<head> <style type="text/css" media="print"> @page { size: auto; /* auto is the initial value */ margin: 0mm; /* this affects the margin in the printer settings */ } body { background-color:#FFFFFF; border: solid 1px black ; margin: 0px; /* this affects the margin on the content before sending to printer */ } </style> </head>
安东尼,
不幸的是,有这么多人不理解你的问题。 我有一个类似的请求,希望将头,页码和html页脚删除。 在这种情况下,客户端正在呈现一个可以兼作正式证书的HTML页面。 添加的URL,页面和标题是不相关的,导致最终产品不太令人满意。 在某些方面,它看起来很便宜。
Media = Print无法禁用这些浏览器默认值。 唯一的解决方法是告诉用户点击“齿轮”button,并打开/closures这些项目。 严重的是,我不知道我可以做20年(我们认为典型的用户将有一个线索点击切换button?)。
如果CSS支持Media = Print,则应支持控制整个最终用户打印体验的function。 我明白,浏览器提供了附加的字段,但是,为什么不让CSS控制整体打印体验 – 如果这是我们所期望的。 90%的解决scheme可能是100%,三个领域! 一个简单的:
#BrowserPrintDefaults{display:none}
就足够了。
同样,最终用户是否打印出来也不是问题(也许你的客户是非常私人的,不希望打印的URL在四处stream动,或者也许是一个pipe理团队使用私人协作网站?)。 很高兴为最终用户辩护,但如果有人正在寻求答案,不要回应说这是最终用户显示或隐藏的权利。 有时候是客户付账的权利。
所以….没有黑客registry或强制用户在打印预览切换设置,任何人都可以find答案?
无法暂时或永久地从CSS或JavaScript更改打印机设置,边距或任何其他浏览器设置。
虽然这对您的真正需求不幸,但这些限制是95%以上的networking用户在浏览器中启用JavaScript的原因。 ( 浏览器统计 )
试试这个代码,为我工作100%:
景观:
<head> <style type="text/css"> @page{ size: auto A4 landscape; margin: 3mm; } </style> </head>
对于Portait:
<head> <style type="text/css"> @page{ size: auto; margin: 3mm; } </style> </head>
我解决了我的问题使用
<style media="print"> @page { size: auto; margin: 0; } </style>
既然你提到“在他们的浏览器”和Firefox,如果你正在使用Internet Explorer,你可以通过临时设置registry中的值来禁用页眉/页脚,参见这里的例子。 AFAIK我还没有听说过在其他浏览器中这样做的方法。 Daniel和Mickel的答案似乎都是相互冲突的,我想在firefox的registry中可能会有类似的设置来删除页眉/页脚或自定义它们。 你检查出来了吗?
希望这有助于和节日快乐,最好的问候,汤姆。
@page margin:0mm现在可以在Firefox 19.0a2(2012-12-07)中使用。