vue前端打印代码加遇到的问题

安装 vue-print-nb-jeecg 插件

npm install vue-print-nb-jeecg –save

全局挂载main.js

import Print from 'vue-print-nb-jeecg'

Vue.use(Print);

写一个打印按钮,添加 v-print=“’#printContent’”为下面div的id

<a-button v-print="'#printContent'" type="primary">
打印</a-button>

打印的内容,div的id为printContent

<section ref="print" id="printContent" class="">
    <div>内容</div>
</section>

遇到的问题

1.打印预览时多一张空白页

解决:

<style @media="printContent">
@page {
size: auto;
/* margin: 3mm; */
}
html {
background-color: #ffffff;
height: auto;
/* margin: 0px; */
}
</style>

2.希望在打印时显示 id="printContent" 的内容,但在组件引用时隐藏它

使用 Vue.js 的条件渲染结合 CSS 来实现,使用了 v-show="printMode" 来根据 printMode 的值决定是否显示 id="printContent" 的元素。在组件初始化时,printMode 的初始值为 false,因此 id="printContent" 的元素会被隐藏。

然后,使用 CSS 的 @media 查询来定义打印样式。在 @media print 查询中,我们将 #printContent 的显示设置为 block,以确保在打印时显示特定内容。

同时,通过 window 对象的 beforeprintafterprint 事件监听器来切换 printMode 的值。在打印开始前,beforeprint 事件会触发 beforePrint 方法,将 printMode 设置为 true,以便在打印时显示 id="printContent" 的内容。在打印完成后,afterprint 事件会触发 afterPrint 方法,将 printMode 设置为 false,以便在组件引用时隐藏 id="printContent" 的内容。

这样,当点击打印按钮时,id="printContent" 的元素会显示出来,并在打印时正常显示,而在组件引用时会隐藏。

<template>
  <a-card :bordered="false" :class="{ abcdefg: true}">
    <div class="no-print" style="text-align: right">
      <a-button @click="togglePrintMode" type="primary">打印</a-button>
    </div>
    <section ref="print" id="printContent" class="abcdefg" v-show="printMode">
      <div>
        内容
      </div>
    </section>
  </a-card>
</template>

<script>
export default {
  data() {
    return {
      printMode: false
    }
  },
  methods: {
    togglePrintMode() {
      this.printMode = !this.printMode;
    },
    beforePrint() {
      this.printMode = true;
    },
    afterPrint() {
      this.printMode = false;
    }
  },
  mounted() {
    window.addEventListener("beforeprint", this.beforePrint);
    window.addEventListener("afterprint", this.afterPrint);
  },
  beforeDestroy() {
    window.removeEventListener("beforeprint", this.beforePrint);
    window.removeEventListener("afterprint", this.afterPrint);
  }
}
</script>

<style>
@media print {
  #printContent {
    display: block !important;
  }
}
@media screen {
  #printContent {
    display: none;
  }
}
</style>

另,还有其他的插件,如vue-print-nb类似使用 

相关推荐

  1. 前端遇到问题

    2023-12-08 04:28:01       34 阅读
  2. github上传代码遇到问题

    2023-12-08 04:28:01       60 阅读
  3. 面试中会遇到VUE问题

    2023-12-08 04:28:01       52 阅读
  4. vue3 开发中遇到问题

    2023-12-08 04:28:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 04:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 04:28:01       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 04:28:01       82 阅读
  4. Python语言-面向对象

    2023-12-08 04:28:01       91 阅读

热门阅读

  1. 服务器如何修改密码

    2023-12-08 04:28:01       55 阅读
  2. 《路由与交换技术》读书笔记

    2023-12-08 04:28:01       56 阅读
  3. 通过Python Flask快速构建应用程序

    2023-12-08 04:28:01       51 阅读
  4. 删除容器挂载卷打包容器镜像并传到阿里云

    2023-12-08 04:28:01       52 阅读
  5. What is John Deere diagnostic software called?

    2023-12-08 04:28:01       48 阅读
  6. Uni-App知识点

    2023-12-08 04:28:01       57 阅读
  7. STL-空间配置器

    2023-12-08 04:28:01       54 阅读
  8. react(2) - react-redux的基本使用

    2023-12-08 04:28:01       58 阅读
  9. ❀My学习Linux命令小记录(15)❀

    2023-12-08 04:28:01       39 阅读
  10. 设计多级菜单的数据结构(C语言实现)

    2023-12-08 04:28:01       60 阅读