前一段时间需要使用vue实现一个页面的打印功能
vue-print-nb是很好用但是由于他不兼容IE浏览器,而我恰好要用到IE所以就放弃了他
window.print()这个方法是打印当前页面的所有信息,那么我只需要打印一部分信息时就需要就行一个简单的修改。
我们可以逆向思维思考一下,我想打印页面的局部信息,我只需要把不需要打印的信息隐藏起来就好了。
这时候我们就可以使用css的@media 查询功能。
我们可以使用这段代码来选择在打印的时候隐藏部分内容
@media print{
.noNeedPrint
{
display:none !important;
}
}
noNeedPrint这个class的元素还是可以显示在页面当中的,但是打印的时候就不会出现在预览中,这样一来我们就可以使用window.print()实现页面的局部打印功能啦!
下面我举个例子说明一下具体实现:
<template>
<div>
<el-container style="height: 500px; border: 1px solid #eee">
<el-container>
<el-header
class="noNeedPrint"
style="text-align: right; font-size: 12px"
>
<span>404你是不是找不到了</span>
</el-header>
<el-main>
<el-table :data="tableData">
<el-table-column
prop="date"
label="日期"
width="140"
>
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="120"
>
</el-table-column>
<el-table-column
prop="address"
label="地址"
>
</el-table-column>
</el-table>
</el-main>
</el-container>
</el-container>
<div
class="noNeedPrint"
style="margin:10px 0 0 10px"
>
<el-button
type="primary"
@click="print()"
>打印页面</el-button>
</div>
</div>
</template>
<script>
export default {
data () {
const item = {
date: '2020-02-02',
name: '404',
address: '辽宁省大连市'
};
return {
tableData: Array(6).fill(item)
}
},
methods: {
print () {
window.print()
}
},
};
</script>
<style scoped>
.el-header {
background-color: #B3C0D1;
color: #333;
line-height: 60px;
}
@media print{
.noNeedPrint
{
display:none !important;
}
}
@page {
/* 打印A4大小 */
size: auto A4 landscape;
margin: 3mm;
}
</style>
当我点击打印按钮的时候就只打印我的表格中的信息。
实现效果如下图:
- 记录生活的404