当前位置:   article > 正文

vue2 使用vue-print-nb实现打印功能_vue-print-nb插件

vue-print-nb插件

记录使用vue-print-nb插件实现打印功能的过程。

参考文章Vue使用插件vue-print-nb实现当前页面打印功能

参考文章VUE利用vue-print-nb实现打印功能

  • vue2安装及引入

安装

npm install vue-print-nb --save

引入

  1. // 1. 全局挂载,在main.js添加
  2. import Print from 'vue-print-nb'
  3. Vue.use(Print)
  4. // or
  5. // 2. 自定义指令,在单业务页面添加
  6. import print from 'vue-print-nb'
  7. directives: {
  8. print
  9. }
  • vue3安装及引入

安装

npm install vue3-print-nb --save

引入

  1. // 1. 全局挂载
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. import print from 'vue3-print-nb'
  5. const app = createApp(App)
  6. app.use(print)
  7. app.mount('#app')
  8. // or
  9. // 2. 自定义指令
  10. import print from 'vue3-print-nb'
  11. directives: {
  12. print
  13. }
  • 使用

给打印的区域设置id值

  1. <template>
  2. <div class="vuePrintNb-container" id="NbAllPage">
  3. <div class="button-container">
  4. <el-button type="primary" class="common-button" v-print="'#NbImgPrint'">打印图片</el-button>
  5. <el-button type="primary" class="common-button" v-print="'#NbJsonPrint'">打印表格</el-button>
  6. <el-button type="primary" class="common-button" v-print="'#NbAllPage'">打印html</el-button>
  7. </div>
  8. <div class="img-container wrap-style" id="NbImgPrint">
  9. <div v-for="item in 4">
  10. <img :src="Logo" alt="" class="logo-img">
  11. </div>
  12. </div>
  13. <div class="json-container wrap-style" id="NbJsonPrint">
  14. <el-table
  15. :data="tableData"
  16. border
  17. :header-cell-style="{background: variables.tableHeaderBackGroundColor, color: variables.tableHeaderColor}"
  18. >
  19. <el-table-column label="活动" prop="title"></el-table-column>
  20. <el-table-column label="描述" prop="decs"></el-table-column>
  21. <el-table-column label="状态" prop="state"></el-table-column>
  22. <el-table-column label="活动时间" prop="created_at"></el-table-column>
  23. </el-table>
  24. </div>
  25. </div>
  26. </template>

打印的指令值可以是 具体的id值

<el-button type="primary" class="common-button" v-print="'#NbAllPage'">打印html</el-button>

也可以是对象

<el-button type="primary" class="common-button" v-print="'printObject'">打印html</el-button>
  1. export default {
  2. name: 'index',
  3. data(){
  4. let that = this
  5. return {
  6. printObject: {
  7. id: 'NBAllPage',
  8. popTitle: '配置页眉标题', // 打印配置页上方的标题
  9. extraHead: '打印', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
  10. preview: true, // 是否启动预览模式,默认是false
  11. previewTitle: '预览的标题', // 打印预览的标题
  12. previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
  13. zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
  14. previewBeforeOpenCallback () {
  15. console.log('正在加载预览窗口!');
  16. console.log(that.msg, this)
  17. }, // 预览窗口打开之前的callback
  18. previewOpenCallback () {
  19. console.log('已经加载完预览窗口,预览打开了!')
  20. }, // 预览窗口打开时的callback
  21. beforeOpenCallback () {
  22. console.log('开始打印之前!')
  23. }, // 开始打印之前的callback
  24. openCallback () {
  25. console.log('执行打印了!')
  26. }, // 调用打印时的callback
  27. closeCallback () {
  28. console.log('关闭了打印工具!')
  29. }, // 关闭打印的callback(无法区分确认or取消)
  30. clickMounted () {
  31. console.log('点击v-print绑定的按钮了!')
  32. },
  33. // url: 'http://localhost:8080/', // 打印指定的URL,确保同源策略相同
  34. // asyncUrl (reslove) {
  35. // setTimeout(() => {
  36. // reslove('http://localhost:8080/')
  37. // }, 2000)
  38. // },
  39. }
  40. }
  41. },
  42. }

打印对象的回调函数内,this指向当前printObject object对象,that返回Vue对象;

若想实现分页,给要分页的元素加上page-break-after: always;

  1. <style lang="scss" scoped>
  2. .wrap-style{
  3. page-break-after: always;
  4. }
  5. </style>

打印时发现,打印的效果不是想要的,或者表格边框线显示不全,使用媒体查询设置打印的样式

  1. <style media="print" lang="scss">
  2. // 修改页边距
  3. @page {
  4. //size: auto;
  5. //margin: 3mm;
  6. }
  7. // 媒体查询, 打印时修改样式
  8. @media print {
  9. #NbAllPage{
  10. width: 1200px;
  11. zoom: 0.8;
  12. margin: 0 auto;
  13. }
  14. .el-table{
  15. border: 3px solid #606060;
  16. }
  17. .el-table__header-wrapper {
  18. border-bottom: 3px solid #606060;
  19. }
  20. .el-table > .el-table__header-wrapper > .el-table__header > thead > tr > th{
  21. border-right: 3px solid #606060 !important;
  22. }
  23. .el-table > .el-table__body-wrapper > .el-table__body > tbody > .el-table__row > td{
  24. border-bottom: 3px solid #606060 !important;
  25. border-right: 3px solid #606060 !important;
  26. }
  27. }
  28. </style>
  • 效果图

I. 只打印图片

 II. 只打印表格

III. 打印整个页面

  •  配置参数

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/115467
推荐阅读
相关标签
  

闽ICP备14008679号