×

vue3应用:如何使用vue3-print-nb实现区域打印功能

作者:Terry2023.11.11来源:Web前端之家浏览:1215评论:0
关键词:jsvue

分享一个vue3小应用:如何使用vue3-print-nb实现区域打印功能。

安装vue3-print-nb

npm install vue3-print-nb

在main.ts中引入

//引入
import print from 'vue3-print-nb'
//挂载
const app = createApp(App)
app.use(print)

HTML

<!-- 打印区域容器 -->
<div id="printBox">
<span>我就是被打印的内容</span>
<span>在#printBox 容器里的内容都会被打印噢</span>
</div>
<!-- 按钮绑定打印 -->
<button v-print="print">点击打开打印预览</button>

参数配置

//这里是打印的配置项
const  print=ref({
        id: 'printBox',//这里的id就是上面我们的打印区域id,实现指哪打哪
        popTitle: '配置页眉标题', // 打印配置页上方的标题
        extraHead: '', // 最上方的头部文字,附加在head标签上的额外标签,使用逗号分割
        preview: false, // 是否启动预览模式,默认是false
        previewTitle: '预览的标题', // 打印预览的标题
        previewPrintBtnLabel: '预览结束,开始打印', // 打印预览的标题下方的按钮文本,点击可进入打印
        zIndex: 20002, // 预览窗口的z-index,默认是20002,最好比默认值更高
        previewBeforeOpenCallback() { console.log('正在加载预览窗口!'); }, // 预览窗口打开之前的callback
        previewOpenCallback() { console.log('已经加载完预览窗口,预览打开了!') }, // 预览窗口打开时的callback
        beforeOpenCallback() { console.log('开始打印之前!') }, // 开始打印之前的callback
        openCallback() { console.log('执行打印了!') }, // 调用打印时的callback
        closeCallback() { console.log('关闭了打印工具!') }, // 关闭打印的callback(无法区分确认or取消)
        clickMounted() { console.log('点击v-print绑定的按钮了!') },
      })

分页打印示例代码

<template>
    <div>
        <button v-print="'#a'">打印</button>
        <div id="a">
             // 方法一
             // 使用div包裹需要分页的块 使用 css属性 page-break-after:always进行分页
            <div style="page-break-after:always">第一页</div>
            <div style="page-break-after:always">第二页</div>
        </div>
    </div>
</template>
<style>
     // 方法二
     // 使用媒体查询 在打印时设置 body 和 html 的高度为auto
     @media print {
        @page {
          size:  auto;
        }
        body, html {   //如果vue最外层id,默认是#app。如果设置了height:100%;,那么#app也加
          height: auto !important;
        }
      }
</style>

大家试试吧。

您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://www.jiangweishan.com/article/js20231111a1.html

网友评论文明上网理性发言 已有0人参与

发表评论: