在Vue3中使用vue3-print-nb實(shí)現(xiàn)前端打印功能
前言
在前端開(kāi)發(fā)中,經(jīng)常需要打印頁(yè)面的特定部分,比如客戶(hù)列表或商品詳情頁(yè)。要快速實(shí)現(xiàn)這些功能,可以使用 vue3-print-nb 插件。它通過(guò)對(duì) DOM 元素的操作和 CSS 樣式的處理,輕松實(shí)現(xiàn)頁(yè)面內(nèi)容的打印功能。
安裝
當(dāng)前示例以Vue3+ElementPlus為例,如果要使用vue2版本的就安裝npm install vue-print-nb --save。
npm install vue3-print-nb --save
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import print from 'vue3-print-nb'
import './style.css'
import App from './App.vue'
const app = createApp(App)
app.use(ElementPlus)
app.use(print)
app.mount('#app')
使用
<script setup>
import { ref } from 'vue'
defineProps({
msg: String,
})
const count = ref(0)
const tableData = [
{
date: '2016-05-03',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-02',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-04',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
{
date: '2016-05-01',
name: 'Tom',
address: 'No. 189, Grove St, Los Angeles',
},
]
</script>
<template>
<h1>{{ msg }}</h1>
<div class="btn">
<el-button type="primary" v-print="'#printTable'">打印</el-button>
</div>
<el-table id="printTable" :data="tableData" border style="width: 100%">
<el-table-column prop="date" label="Date" width="180" />
<el-table-column prop="name" label="Name" width="180" />
<el-table-column prop="address" label="Address" />
</el-table>
</template>

只需要在要打印的元素上通過(guò)v-print屬性即可實(shí)現(xiàn)打印的效果,可以選擇打印全部或者打印指定頁(yè)面,比如我只想要打印el-table表格部分,只需要在el-button按鈕上面綁定v-print="'#printTable'",我已經(jīng)提前在el-table上定義好了id="printTable",v-print的屬性值對(duì)應(yīng)的就是el-table。 打印效果預(yù)覽

以上實(shí)現(xiàn)了一個(gè)最基本的打印效果,v-print還支持更多的屬性呢!它的屬性值可以是一個(gè)對(duì)象以此來(lái)實(shí)現(xiàn)更加定制化的打印效果,一起來(lái)看看吧
HTML
<div class="btn">
<el-button type="primary" v-print="printObj">打印</el-button>
</div>
<el-table id="printTable" :data="tableData" border style="width: 100%">
<el-table-column prop="date" label="Date" width="180" />
<el-table-column prop="name" label="Name" width="180" />
<el-table-column prop="address" label="Address" />
</el-table>
JavaScript
const printObj = {
id: 'printTable',
popTitle: 'print nb',
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",
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
beforeOpenCallback (vue) {
console.log('打開(kāi)之前')
},
openCallback (vue) {
console.log('執(zhí)行了打印')
},
closeCallback (vue) {
console.log('關(guān)閉了打印工具')
}
}
我們可以給要打印的頁(yè)面指定額外的樣式、額外的樣式、額外頭,甚至是添加回調(diào)函數(shù)!
打印網(wǎng)址
為printObj對(duì)象添加一個(gè)url屬性即可實(shí)現(xiàn)打印當(dāng)前網(wǎng)址對(duì)應(yīng)的整個(gè)頁(yè)面。但是如何設(shè)置了url數(shù)據(jù)就不能再同時(shí)設(shè)置id屬性了。還有一點(diǎn)需要的注意的是設(shè)置url屬性需要確保同源策略相同!
const printObj = {
url: 'http://localhost:5173/',
popTitle: 'good print',
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",
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
beforeOpenCallback (vue) {
console.log('打開(kāi)之前')
},
openCallback (vue) {
console.log('執(zhí)行了打印')
},
closeCallback (vue) {
console.log('關(guān)閉了打印工具')
}
}
打印預(yù)覽
設(shè)置了preview屬性將在打印時(shí)候顯示打印預(yù)覽。
const printObj = {
id: 'printTable',
preview:true, // 打印預(yù)覽
previewTitle: '打印預(yù)覽',
popTitle: 'good print',
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",
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
beforeOpenCallback (vue) {
console.log('打開(kāi)之前')
},
openCallback (vue) {
console.log('執(zhí)行了打印')
},
closeCallback (vue) {
console.log('關(guān)閉了打印工具')
}
}
打印預(yù)覽效果

v-print API
| 參數(shù) | 說(shuō)明 | 類(lèi)型 | 可選項(xiàng) | 默認(rèn)值 |
|---|---|---|---|---|
| id | 范圍打印ID,必填值 | String | — | — |
| standard | 文檔類(lèi)型(僅打印本地范圍) | String | html5/loose/strict | html5 |
| extraHead | 在節(jié)點(diǎn)中添加 DOM 節(jié)點(diǎn),多個(gè)節(jié)點(diǎn)用 分隔,(僅打印局部范圍) | String | — | — |
| extraCss | 新的 CSS 樣式表,并使用 分隔多個(gè)節(jié)點(diǎn),(僅打印局部范圍) | String | — | - |
| popTitle | 標(biāo)簽內(nèi)容(僅打印本地范圍) | String | — | - |
| openCallback | 調(diào)用打印工具成功回調(diào)函數(shù) | Function | Returns the instance of Vue called at that time | - |
| closeCallback | 關(guān)閉打印工具成功回調(diào)函數(shù) | Function | Returns the instance of Vue called at that time | - |
| beforeOpenCallback | 調(diào)用打印工具前的回調(diào)函數(shù) | Function | Returns the instance of Vue called at that time | - |
| url | 打印指定URL。(不可同時(shí)設(shè)置ID) | string | - | - |
| asyncUrl | 通過(guò) 'resolve()' 返回 URL | Function | - | - |
| preview | 預(yù)覽工具 | Boolean | - | false |
| previewTitle | 預(yù)覽工具標(biāo)題 | String | - | '打印預(yù)覽' |
| previewPrintBtnLabel | 預(yù)覽工具按鈕的名稱(chēng) | String | - | '打印' |
| zIndex | 預(yù)覽工具的 CSS:z-index | String,Number | - | 20002 |
| previewBeforeOpenCallback | 啟動(dòng)預(yù)覽工具前的回調(diào)函數(shù) | Function | Returns the instance of Vue | - |
| previewOpenCallback | 預(yù)覽工具完全打開(kāi)后的回調(diào)函數(shù) | Function | Returns the instance of Vue | - |
官方文檔:https://github.com/Power-kxLee/vue3-print-nb?tab=readme-ov-file#v-print-api
到此這篇關(guān)于在Vue3中使用vue3-print-nb實(shí)現(xiàn)前端打印功能的文章就介紹到這了,更多相關(guān)vue3前端打印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)豎屏滾動(dòng)公告效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)豎屏滾動(dòng)公告效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
vue實(shí)現(xiàn)多級(jí)側(cè)邊欄的封裝
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)多級(jí)側(cè)邊欄的封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
詳解如何用VUE寫(xiě)一個(gè)多用模態(tài)框組件模版
這篇文章主要介紹了詳解如何用VUE寫(xiě)一個(gè)多用模態(tài)框組件模版,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
Vue進(jìn)行數(shù)據(jù)可視化圖表展示的實(shí)現(xiàn)示例
數(shù)據(jù)可視化是現(xiàn)代化的數(shù)據(jù)分析和展示方式,可以使數(shù)據(jù)更加直觀(guān)、易于理解和傳達(dá),Vue作為一款流行的前端框架,提供了豐富的插件和工具來(lái)實(shí)現(xiàn)數(shù)據(jù)可視化圖表展示,本文將介紹如何使用Vue和Echarts/D3.js來(lái)實(shí)現(xiàn)數(shù)據(jù)可視化圖表展示,并提供示例代碼和實(shí)際應(yīng)用場(chǎng)景2023-10-10
vue+springboot實(shí)現(xiàn)登錄功能
這篇文章主要為大家詳細(xì)介紹了vue+springboot實(shí)現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Vue3集成Leaflet實(shí)現(xiàn)一個(gè)功能完整的地圖可視化組件
在現(xiàn)代 Web 應(yīng)用中,地圖可視化是一個(gè)常見(jiàn)的需求,無(wú)論是展示位置信息、軌跡追蹤,還是數(shù)據(jù)統(tǒng)計(jì)分析,地圖都能提供直觀(guān)的視覺(jué)體驗(yàn),本文將詳細(xì)介紹如何在 Vue 3 項(xiàng)目中集成 Leaflet 地圖庫(kù),實(shí)現(xiàn)一個(gè)功能完整的地圖可視化組件,需要的朋友可以參考下2026-01-01

