我已经设置了一个打印样式表,在Firefox中看起来很好。
在Chrome中,整个页面在打印预览(CTRL + P)中断开,但是如果我打开Chrome DEVTools(F12)并使用emulate CSS media
功能,页面看起来是正确的 - 就像在Firefox中一样。
奇怪的是,如果我再次打开打印预览,在我激活模拟选项一次后,页面在打印预览中看起来正确!即使我只是激活然后取消激活模拟选项,打印预览总是正确的!
我的print.css以
开头 @media print { ... }
并且包含在页面<head>
中,如下所示:
<link rel="stylesheet" type="text/css" href="print.css" media="print">
我尝试删除media="print"
,但没有任何变化。
答案 0 :(得分:11)
答案 1 :(得分:2)
如果您没有找到给出答案的解决方案,那么我有话要说:
print
中Chrome DEVTools emulation css media
选项中的仅用于将打印CSS规则应用于页面,出于测试目的,它不考虑打印所伴随的所有其他事情,它会显示打印预览,但有时它不将打印页面显示为实际的打印预览。
如果您使用的是引导程序,则如果仅使用col-md-*
或col-sm-*
,它将无法正常工作;但是,如果您使用的是col-xs-*
,则它将正常工作,因为问题在于页面本身就像素而言很小,因此bootstrap认为它需要应用xs样式。
不同的浏览器在打印页面时的行为也有所不同。唯一的最佳测试打印方式是通过实际打印或打印为pdf。
答案 2 :(得分:1)
我遇到了完全相同的突破问题,我已经能够修复它了。
在我的情况下,问题是由于使用自定义的@ font-face为'print'CSCS引起的,我没有在'screen'CSS中使用。
浏览器似乎没有从第一次预览的打印样式表加载自定义@ font-face,并且页面呈现或多或少为空。它将在第二次打印预览中完美呈现。
我的解决方案是在屏幕css中也从pint css加载相同的@ font-face规则。这样,浏览器在查看打印预览时已经加载了字体,它就像魅力一样。
答案 3 :(得分:0)
要添加到Ustice的回答和Jeeva Jsb的评论:在应用transition: none !important
规则后,您可能需要允许DOM重新呈现。我通过在编程打印页面之前向主体添加print
CSS类来完成此操作:
CSS:
body.print * {
transition: none !important;
}
JS(使用jQuery):
$('body').addClass('print');
setTimeout(function() {
window.print();
}, 0);
用户打印完页面后,不要忘记删除print
课程。 (见how to detect window.print() finish。)