vue中使用window.print打印效果

项目要求

  • 打印每页有10行表格,如果接口数据没有十个显示10行

效果图

  • 第一页

  • 第二页

子组件

		<template>
<div>
<div class="print" :key="i" v-for="i in Len">
<p class="print-title">打印页面</p>
<div class="print-header">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione officiis quaerat dolorem nesciunt error et fugit fuga molestias quas labore autem, eligendi eum rem alias quod possimus quae voluptatum? Id?
</div>
<div class="print-layout">
我是来占位置的
</div>
<ul class="print-table">
<li class="first-li">
<span>序号</span>
<span>姓名</span>
<span>性别</span>
<span>年龄</span>
<span>电话</span>
<span>住址</span>
</li>
<li class="main-li" v-for="(item,index) in 10" :key="item">
<span v-if="dataList[index+10*(i-1)]">{{item+(10*(i-1))}}</span>
<span v-else></span>
<span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].name}}</span>
<span v-else></span>
<span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].sex}}</span>
<span v-else></span>
<span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].age}}</span>
<span v-else></span>
<span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].phone}}</span>
<span v-else></span>
<span v-if="dataList[index+10*(i-1)]">{{dataList[index+10*(i-1)].address}}</span>
<span v-else></span>
</li>
</ul>
<div class="print-footer">
我是底部信息
</div>
</div>
</div>
</template>
<script>
export default {
props: ['itemList'],
data() {
return {
dataList: []
}
},
computed:{
Len(){
if(this.dataList.length<=0) {
return 1;
}
else{
return Math.ceil(this.dataList.length/10.0);
}
}
},
created() {
this.dataList = this.itemList || [];
this.dataList=[...this.dataList];
}
}
</script>
<style lang="less">
@media screen {
.print {
display: none;
}
}
@media print {
#app {
display: none;
}
.print {
display: block;
}
}
* {
margin: 0;
padding: 0;
}
ul,li {
list-style-type: none;
}
.print {
page-break-before:always;
width: 297mm;
height: 209mm;
padding: 24px 30px 0 30px;
box-sizing: border-box;
.print-title {
font-size: 18px;
}
.print-header {
height: 146px;
padding-top: 15px;
box-sizing: border-box;
font-size: 14px;
}
.print-layout {
height: 184px;
border: 1px solid #45484d;
box-sizing: border-box;
font-size: 14px;
}
.print-table {
height: 293px;
margin-top: 5px;
border: 1px solid #303339;
box-sizing: border-box;
li {
height: 26px;
border-bottom: 1px solid #dadadc;
box-sizing: border-box;
&:last-child {
border-bottom: none;
}
span {
display: inline-block;
width: 16%;
height: 26px;
vertical-align: top;
line-height: 26px;
text-align: center;
border-right: 1px solid #dadadc;
box-sizing: border-box;
color: #2b2e34;
font-size: 12px;
&:last-child {
border-right: none;
}
}
&.first-li {
height: 30px;
background: #bdbec0 !important;
color: #2b2e34;
span {
height:30px;
line-height: 30px;
}
}
&.main-li { }
} }
.print-footer {
height: 115px;
font-size: 14px;
padding-top: 10px;
box-sizing: border-box;
}
}
</style>

父组件

	<template>
<div class="index">
<button @click="handleClick">点击</button>
<button @click="printClick">打印</button>
<!-- 打印页面 -->
<div v-if="printShow" >
<Print :itemList="itemAjax" ref="printDom"></Print>
</div>
</div>
</template>
<script>
import Print from '../components/print.vue'; export default {
data() {
return{
printShow: false,
itemAjax: [
{
name: '杜二',
sex: '女',
age: '17',
phone: 112365478961,
address: '浙江'
},
{
name: '张三',
sex: '男',
age: '18',
phone: 112365478966,
address: '上海'
},
{
name: '李四',
sex: '男',
age: '38',
phone: 112365478968,
address: '南京'
},
{
name: '王麻子',
sex: '男',
age: '28',
phone: 112365478969,
address: '苏州'
},
{
name: '王大',
sex: '女',
age: '18',
phone: 112365478970,
address: '杭州'
},
{
name: '杜二',
sex: '女',
age: '17',
phone: 112365478971,
address: '浙江'
},
{
name: '张三',
sex: '男',
age: '18',
phone: 112365458966,
address: '上海'
},
{
name: '李四',
sex: '男',
age: '38',
phone: 112365878968,
address: '南京'
},
{
name: '王麻子',
sex: '男',
age: '28',
phone: 112365978969,
address: '苏州'
},
{
name: '王大',
sex: '女',
age: '18',
phone: 112365108970,
address: '杭州'
},
{
name: '杜二',
sex: '女',
age: '17',
phone: 112365474971,
address: '浙江'
}
]
}
},
methods: {
handleClick() {
alert('点击事件')
},
printClick(){
this.printShow = true;
this.$nextTick(()=>{
const print = this.$refs.printDom.$el;
document.body.appendChild(print);
window.print();
this.printShow = false;
})
}
},
components: {
Print
} }
</script>

window.print打印方法实现的更多相关文章

  1. window.print() 打印页面部分内容的方法

    用 JavaScript 实现页面数据的打印 : 主要是用到了一个 print() 函数 , 该函数将会打印整个 web 页面 body 内的所有 html 数据 ! 使用方法为 window.pri ...

  2. 用window.print()打印指定div里面的内容(转载的)

    用window.print()打印指定div里面的内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.p ...

  3. 用window.print()打印指定div里面的内容

    用window.print()打印指定div里面的内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.p ...

  4. Web window.print() 打印

    web打印 window.print() 我只给出比较有效的,方便的打印方法,有些WEB打印是调用ActiveX控件的,这样就需要用户去修改自己IE浏览器的Internet选项里的安全里的Active ...

  5. window.print()打印页面指定内容(使用iframe保证原页面不失效)

    使用window.print()时会出现两个问题: (1)直接使用window.print() 打印的是整页内容-->无法实现打印指定区域 (2)打印时替换body中的内容,打印完成后再替换回来 ...

  6. window.print打印指定html元素中的内容

    通常有些时候我们项目过程中使用到打印功能,而wndow.print便是系统里提供的一个函数. 但是直接使用的话,它打印的将是整个页面的所有元素,而有些时候我们又只需要打印部分内容. <body& ...

  7. 用window.print()打印如何去掉页眉和页脚

    用window.print()打印如何去掉页眉和页脚 2007-07-12 11:44:52|  分类: javascript 知识|举报|字号 订阅     <script language= ...

  8. window.print()打印网页(一)

    有时候需要将网页内容打印到纸上,最简单的一种方法是用window对象的print方法. window.print()默认打印当前网页的所有部分.(除了背景,默认打印都是白底黑字,如果有特别的设置 要另 ...

  9. window.print打印指定div

    window.print可以打印网页,但有时候我们只希望打印特定控件或内容,怎么办呢? 首先我们可以把要打印的内容放在div中,然后用下面的代码进行打印. <html> <head& ...

随机推荐

  1. 【bzoj4540】 Hnoi2016—序列

    http://www.lydsy.com/JudgeOnline/problem.php?id=4540 (题目链接) 题意 给出$n$个数的序列,$m$个询问,每次询问一段区间$[l,r]$,问$[ ...

  2. 使用LD_Preload的Linux权限升级技巧

      0x00 前言 共享库是程序在启动时加载的库.正确安装共享库后,之后启动的所有程序将自动使用新的共享库. 0x01 共享库名称 每个共享库都有一个名为soname的特殊名称.soname有前缀li ...

  3. git "refusing to merge unrelated histories" 解决方法

    出现这个错误是因为本地的 git 历史和远程仓库的 git 历史不一样,如果我们想要合并两个不同的 git 历史(我们必须要清楚我们在做什么),就可以使用这个选项来进行强制合并不同的 git 历史,如 ...

  4. Centos7.2安装tomcat+Myeclipse(遇到的一些问题与总结)+web项目实战

    工作环境:centos7.2 PS:没有耐心的同学可以直接跳到后面的安装方法,对于安装方法大多是网上的,我只是做相关收集和总结 给个tomca和Myeclipset折腾的半死,现在做一些总结1.一定要 ...

  5. 计数排序与桶排序(bucket sort)

    Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...

  6. Docker图形界面管理之Portainer

    介绍 Portainer是一个开源.轻量级Docker管理用户界面,基于Docker API,可管理Docker主机或Swarm集群,支持最新版Docker和Swarm模式.官方文档 https:// ...

  7. Python 字符串前面加u,r,b的含义

    1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...

  8. U45490 还没想好名字的题Ⅱ

    这一题的环状板 Solution 暴力断环为链, 枚举起点跑 \(n\) 遍 \(DP\), 取最小值即可 Code #include<iostream> #include<cstd ...

  9. PHP5下WSDL,SOAP调用实现过程

    一.基础概念 SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装 ...

  10. Nlog写日志到数据库

    https://github.com/nlog/NLog/wiki/Database-Target