vue3 页面打印 vue3-print-nb

页面打印效果图:

之前使用 vue2 用的是 vue-print-nb

现在项目是 vue3 组件用的是 vue3-print-nb

使用方法
安装 npm i vue3-print-nb --save 或者 yarn add vue3-print-nb

在 main.js 中引入
import { createApp } from "vue";
import App from "./App.vue";
import print from "vue3-print-nb";

const app = createApp(App);
app.use(print);

组件中使用
print.vue
<template>
    <div>
        <div id="printContent">
        ....
        打印内容
        </div>
        <a-button v-print="printObj" type="primary">打印</a-button>
    </div>
</template>

<script>
export default {
    name: "print",
    setup() {
        const printObj = {
            id: "printContent",
            popTitle: "页面打印",
        };
        return {
            printObj
        }
    }
}
</script>
<style>
/* 去掉页脚 */
@page {
  size: auto;
  margin: 15mm auto 5mm;
}
printObj支持的API
ids: id, // * 局部打印必传入id
url: binding.value.url, // 打印指定的网址,这里不能跟id共存 如果共存id的优先级会比较高
standard: "", // 文档类型,默认是html5,可选 html5,loose,strict
extraHead: binding.value.extraHead, // 附加在head标签上的额外标签,使用逗号分隔
extraCss: binding.value.extraCss, // 额外的css连接,多个逗号分开
previewTitle: binding.value.previewTitle || "打印预览", // 打印预览的标题
zIndex: binding.value.zIndex || 20002, // 预览窗口的z-index
previewPrintBtnLabel: binding.value.previewPrintBtnLabel || "打印", // 打印预览的标题
popTitle: binding.value.popTitle, // title的标题
preview: binding.value.preview || false, // 是否启动预览模式
asyncUrl: binding.value.asyncUrl,
previewBeforeOpenCallback() {
// 预览窗口打开之前的callback
binding.value.previewBeforeOpenCallback &&
binding.value.previewBeforeOpenCallback(vue);
},
previewOpenCallback() {
// 预览窗口打开之后的callback
binding.value.previewOpenCallback &&
binding.value.previewOpenCallback(vue);
},
openCallback() {
// 调用打印之后的回调事件
binding.value.openCallback && binding.value.openCallback(vue);
},
closeCallback() {
binding.value.closeCallback && binding.value.closeCallback(vue);
},
beforeOpenCallback() {
binding.value.beforeOpenCallback &&
binding.value.beforeOpenCallback(vue);
},

这个vue3版本的打印组件,npm包使用的是打包压缩后的代码, 之前vue-print-nb里面有源码组件
不过一般的打印需求基本满足,如果需要改动源码实现功能的
也可以将vue-print-nb源码放到项目中,即print里面的代码

如:

只是要改动一下,vue3自定义指令和vue2自定义指令不太一样,将print.js中的 bind(el, binding, vnode) {} 函数修改为 mounted: (el, binding, vnode) => {}, 去掉vue.$nextTick, 还要注意替换main.js文件里的print引用文件地址 就可以使用了
posted @ 2023-05-16 14:25  潇湘羽西  阅读(2472)  评论(0编辑  收藏  举报