赞
踩
@media print{ ... }
可以设置打印时样式网页效果:
目标:右键点击打印按钮时能打印表格,忽略下方的文字和图片,并且保留样式
思路:点击打印按钮时,将整个页面的HTML替换为目标区域的HTML,配合@media print{}保留样式,但是页面的HTML被替换后造成页面的改变,因此最后需要刷新一下页面
代码:
<!--HTML部分-->
<!--将需要打印的部分用一个div框起来,给div一个id,这里用print-->
<div id="print">
<table>...表格里面的内容...</table>
</div>
<!--将下面的打印函数绑定到打印按钮上-->
<button @click=print()>打印报销单</button>
//JS部分
//将这个函数绑定到打印按钮上
print(){
let print = document.getElementsByClassName("print")[0] //获取目标区域的HTML结构
document.body.innerHTML = print.innerHTML //替换网页的html内容
window.print() //打印
window.location.reload() //刷新页面,因为网页的html被替换后很丑
}
/*css部分*/
/*用@media print{}保留打印时的样式*/
...直接写在style下的样式,在打印时会丢失,比如:...
table{border: 2px solid black;width: 80%;margin: 0 auto;border-collapse: collapse}
...写在@media print{}中的样式,打印时会保留,比如...
@media print {
table{border: 2px solid black;width: 80%;margin: 0 auto;border-collapse: collapse}
}
/*写在@media print{}中的样式在不打印的时候不会生效,因此打印时的样式要写两遍,里面和外面各一遍*/
此时点击打印按钮的效果为
打印的效果并不理想,因为使用的是A4纸的尺寸,我们可以通过在@media print中设置size配合打印时的设置来解决这个问题
@page{
size: landscape;
margin: 0 ;
}
最终的css部分
<style scoped>
...在网页中正常显示的样式...
@media print{
@page{
size: landscape; /*对打印的尺寸进行设置*/
margin: 0 ; /*去掉上面的水印*/
}
...在打印时需要保留的样式...
}
</style>
最后,在打印的选项中,选择纸张尺寸为Ledger即可
除了这种方法,还有其他的打印思路
<!--HTML部分-->
<!--在html中插入一个iframe节点,插在哪里都行-->
<iframe src="" frameborder="0" width="0" height="0"></iframe>
//打印函数
print(){
let print = document.getElementsByClassName("print")[0] //获取目标区域
doc = iframe.contentWindow.document
doc.write(print.innerHTML) //将目标区域的html写入iframe
iframe.contentWindow.focus()
iframe.contentWindow.print() //打印iframe
}
@media print{
.no-print:{display:none}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。