vue3使用vue3-print-nb打印

打印效果
在这里插入图片描述

1.下载插件

Vue2.0版本安装方法

npm install vue-print-nb --save

Vue3.0版本安装方法:

npm install vue3-print-nb --save

2.main.js引入

vue2引入

import Print from 'vue-print-nb'
Vue.use(Print)

vue3引入

import print from 'vue3-print-nb' // 打印插件
app.use(print)

3.页面使用(代码可直接复制)

注意这是vue3代码:
需要注意点:
1.打印id需要设置
2.某个元素的显示隐藏 可以使用手动写的这三个class处理:.no-print .show-print .page-no
3.我如果不设置width: 1078px !important; 有的具体打印样式宽度不对

<template>
  <div style="background-color: #fff;width: 100%;height: 100%;overflow-y: scroll;">
    <div>
      <el-button @click="printForm">原生打印</el-button>
      <el-button v-print="printObj">插件打印(推荐)</el-button>
      <el-button v-print="printObj2">打印表单2</el-button>
    </div>

    <div>页面其他内容:无需打印部分无需打印部分无需打印部分无需打印部分无需打印部分</div>

    <!-- 打印的元素设置id -->
    <div id="printMe">
      <div style="height: 100px;background-color: #1fff;">打印区域内的内容1</div>
      <div style="height: 100px;display: flex;">
        <div style="flex: 1;">打印区域内的内容2:</div>
        <div style="width: 130px;">打印区域内的内容2:右</div>
      </div>
      <div class="no-print" style="width: 200px;height: 100px;background-color: #f1f;">333333:默认页面显示,但是打印时候不想显示</div>
      <div class="page-no show-print" style="height: 100px;background-color: #a7ff;">444444:默认页面不显示,但是打印时候显示</div>

      <div v-for="(item, index) in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]" :key="index">
        <div style="height: 300px;border-bottom: 1px solid red;">打印区域内的内容{{ item }}</div>
      </div>
    </div>


  </div>
</template>

<script setup>
import { ref } from 'vue'

// 原生打印
const printForm = () => {
  const printMe = document.getElementById('printMe');
  const printWindow = window.open('', '_blank');
  printWindow.document.open();
  printWindow.document.write('<html><head><title>打印</title>');
  printWindow.document.write('</head><body>');
  printWindow.document.write(printMe.innerHTML);
  printWindow.document.write('</body></html>');
  printWindow.document.close();
  printWindow.onload = function () {
    printWindow.print();
    printWindow.close();
  };
}

// 插件打印(推荐)
const printObj = ref({
  id: "printMe", // 这里是要打印元素的ID
  // url:'https://www.baidu.com/',
  popTitle: "打印表单", // 打印的标题
  // extraCss: "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css", // 打印可引入外部的一个 css 文件
  // extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>', // 打印头部文字
  // preview: true, // 是否启动预览模式,默认是false
  previewTitle: '打印客户账单', // 打印预览的标题
  previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
  zIndex: 20003, // 预览窗口的z-index,默认是20002,最好比默认值更高
  previewBeforeOpenCallback() { console.log('正在加载预览窗口!'); }, // 预览窗口打开之前的callback
  previewOpenCallback() { console.log('已经加载完预览窗口,预览打开了!') }, // 预览窗口打开时的callback
  beforeOpenCallback(vue) {
    vue.printLoading = true
    console.log('开始打印之前!')
  }, // 开始打印之前的callback
  openCallback(vue) {
    vue.printLoading = false
    console.log('执行打印了!')
  }, // 调用打印时的callback
  closeCallback() { console.log('关闭了打印工具!') }, // 关闭打印的callback(无法区分确认or取消)
  clickMounted() { console.log('点击v-print绑定的按钮了!') },

})

// 打印表单2(暂未了解)
const printObj2 = ref({
  ids: [], // 这里是要打印元素的ID
})


</script>

<style lang="scss">
/* 打印时的样式--仅仅是打印和预览生效--不改变原页面样式 */
@media print {
  body {
    font-size: 12pt;
    color: black;
    // background: rgb(247, 175, 175); // 背景色需要再打印弹框里勾选才生效
  }
  /* 调整布局以适应打印 */
  #printMe {
    // border: 2px solid greenyellow;
    // width: 100% !important;
    width: 1078px !important; //794px;
    margin: 0;
    padding: 0px;

    /* 隐藏不需要打印的元素 */
    .no-print {
      display: none;
    }

    /* 将原先隐藏的元素 显示在打印内容里 */
    .show-print {
      display: block;
    }

    // 特殊处理样式
    .abc {
      background-color: #1fff; // 背景色需要再打印弹框里勾选才生效
      color: red;
    }

  }

  /* 其他打印样式 */
}

@page {
  /* auto is the initial value */
  size: auto;

  /* 打印边距-会影响页眉页脚显示 */
  // margin: 5mm 5mm 5mm 5mm;
}

// 页面上直接隐藏
.page-no {
  display: none;
}

// 以下是页面的其他样式css
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/664173.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

css :hover的使用

参考未整理 即鼠标移入类名为btn的元素时&#xff0c;她的子元素i样式发生改变 自身的样式也发生改变 &#xff0c;如果他有更多的子元素也可以这样写

LeetCode2542最大子序列的分数

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;两者长度都是 n &#xff0c;再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。 对于选择的下标 i0 &#xff0c;i1 &#xff0c;…&#xff0c; ik - 1 &#xff0c;你的 …

7个卖出信号出现,昂首资本立即盈利收场

在上篇文章中&#xff0c;我们和各位投资者讨论了如果使用匕首交易策略进行交易&#xff0c;但是如果只买进不卖出&#xff0c;是不是还是盈利不了&#xff1f;Anzo Capital昂首资本认为只有低买高卖才能盈利赚钱&#xff0c;只要发现盈利信号就要立即卖出盈利收场&#xff01;…

K8s中配置使用ingress

Ingress是什么 在Kubernetes中&#xff0c;Ingress是一种用于将外部流量路由到集群内部服务的API对象。它通常与Ingress控制器一起使用&#xff0c;Ingress控制器负责根据Ingress规则路由外部流量到不同的服务上。   Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由…

【算法】模拟算法——提莫攻击(easy)

题解&#xff1a;提莫攻击(模拟算法) 目录 1.题目2.题解3.参考代码4.总结 1.题目 题目链接&#xff1a;LINK 2.题解 举例&#xff1a; 3.参考代码 class Solution { public:int findPoisonedDuration(vector<int>& timeSeries, int duration) {int n timeSeri…

mysql 分区

目标 给一个表&#xff08;半年有800万&#xff09;增加分区以增加查询速度 约束 分区不能有外键否则会报错 https://blog.csdn.net/yabingshi_tech/article/details/52241034 主键 按照时间列进行分区 https://blog.csdn.net/winerpro/article/details/135736454 参看以…

CSPM.pdf

PDF转图片 归档&#xff1a;

161.二叉树:在每个树中找最大值(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

FANUC机器人保养服务包,高效又可靠!

发那科机器人作为工业生产中的重要设备&#xff0c;其保养工作至关重要。定期FANUC机械手保养不仅可以延长机器人的使用寿命&#xff0c;还能提高生产效率和质量。 法那科机器人保养步骤&#xff1a; 基本的法兰克机器人保养是维护机器人的第一步&#xff0c;正确的保养步骤还…

Nature Communications|一种超快响应的电子皮肤(柔性压力传感/界面调控/电子皮肤/柔性电子)

南方科技大学郭传飞(Chuan Fei Guo)和中国科学技术大学王柳(Liu Wang)课题组,在《Nature Communications》上发布了一篇题为“Ultrafast piezocapacitive soft pressure sensors with over 10 kHz bandwidth via bonded microstructured interfaces”的论文。论文内容如下…

万字解析线控底盘技术

文章出处&#xff1a;汽车学堂Automooc 引言 在当今这个由科技驱动的时代&#xff0c;汽车电动化、智能化已成为汽车行业的热门话题。特斯拉的自动驾驶功能、蔚来的换电模式、以及比亚迪的刀片电池技术&#xff0c;这些创新不仅引领着市场趋势&#xff0c;也推动着消费者对智…

JVM学习-字节码指令集(四)

异常处理指令 抛出异常指令 athrow指令&#xff1a;在Java程序中显示抛出异常的操作(throw语句)都是由athrow指令来实现除了throw语句显示抛出异常情况之外&#xff0c;JVM规范还规定了许多运行时异常会在其他Java虚拟机指令检测到异常状况时自动抛出&#xff0c;在之前介绍的…

你真的会用收藏夹吗?可道云teamOS收藏夹,竟能缩短多层级文件夹的路径,实现快速访问

在日常工作中&#xff0c;我们时常会面临一个让人头疼的问题&#xff1a;如何在海量的文件和资料中快速找到我们需要的那一份&#xff1f; 尤其是在团队协作中&#xff0c;每个人都在不断地上传、更新文件……导致文件目录层级复杂&#xff0c;搜索也变得繁琐。 这时候&#x…

剖析【C++】——类和对象(下篇)——超详解——小白篇

目录 1.再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 关键字 2. Static成员 2.1 概念 2.2 特性 3. 友元 3.1 友元函数 3.2 友元类 3.3总结&#xff1a; 4. 内部类 1.概念 2.特性 示例代码&#xff1a; 代码分析 3.总结 5.再次理解类和对象 …

vue-esign实现电子签名

导入依赖 pnpm install vue-esign --savesign.vue代码实现 <template><div id"app"><div class"signMask" v-if"autographStatus"><div class"sigh-btns"><button class"btn" type"info&…

mysql中子查询的语法和执行过程

大家好。我们在日常开发过程中&#xff0c;肯定都经常用到了子查询。今天我们就来聊一下mysql中子查询的一些语法以及子查询的执行过程。 一、子查询的语法 首先在开讲之前&#xff0c;我们先创建t1、t2两张表&#xff0c;并分别在表中插入三条数据&#xff0c;方便我们下面内…

269 基于matlab的四连杆机构动力学参数计算

基于matlab的四连杆机构动力学参数计算。将抽油机简化为4连杆机构&#xff0c;仿真出悬点的位移、速度、加速度、扭矩因数、游梁转角等参数&#xff0c;并绘出图形。程序已调通&#xff0c;可直接运行。 269机构动力学参数计算 位移、速度、加速度 - 小红书 (xiaohongshu.com)

校园志愿者|基于SprinBoot+vue的校园志愿者管理系统(源码+数据库+文档)

校园志愿者管理系统 目录 基于SprinBootvue的校园志愿者管理系统 一、前言 二、系统设计 三、系统功能设计 1 系统功能模块 2管理员功能 3志愿者功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&a…

多维时序 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预测

多维时序 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预测 目录 多维时序 | Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SA-BP模拟退火算法优化BP神经网络多变量时间序列预…

pyinstaller将py文件打包成exe

pyinstaller将py文件打包成exe 一、为什么需要将python文件打包成exe文件?二、具体操作步骤一、为什么需要将python文件打包成exe文件? python文件需要在python环境中运行,也就是需要安装python解释器。有时我们自己写的python程序需要分享给自己的朋友、同事或者合作伙伴,…