Vue中使用Printjs插件實(shí)現(xiàn)打印功能
前言
客戶需求: 表單支持在線打印
實(shí)現(xiàn)思路: 百度…百度…百度之后,printjs 這款插件比較滿足需求,無(wú)需下載,無(wú)需寫(xiě)打印模板,并且兼容Element-ui中el-form表單的打印。
一、Print.js介紹
Print.js 主要是為了幫助我們直接在我們的應(yīng)用程序中打印 PDF 文件,無(wú)需離開(kāi)界面,也無(wú)需使用嵌入。 對(duì)于用戶無(wú)需打開(kāi)或下載 PDF 文件而只需打印它們的特殊情況。
支持“pdf”、“html”、“image”和“json”四種打印文檔類型。默認(rèn)為“pdf”。
PrintJS參數(shù)配置表
| 參數(shù) | 默認(rèn)值 | 描述 |
|---|---|---|
| printable | null | 文檔來(lái)源:pdf 或圖片 url、html 元素 id 或 json 數(shù)據(jù)對(duì)象。 |
| type | ‘pdf’ | 可打印類型。可用的打印選項(xiàng)有:pdf、html、image、json 和 raw-html。 |
| header | null | 用于與 HTML、圖像或 JSON 打印的可選標(biāo)題。它將被放置在頁(yè)面頂部。此屬性將接受文本或原始 HTML。 |
| headerStyle | ‘font-weight: 300;’ | 要應(yīng)用于標(biāo)題文本的可選標(biāo)題樣式。 |
| maxWidth | 800 | 最大文檔寬度(以像素為單位)。根據(jù)需要更改此設(shè)置。在打印 HTML、圖像或 JSON 時(shí)使用。 |
| css | null | 應(yīng)用于正在打印的 html 的 css 文件 URL。值可以是具有單個(gè) URL 的字符串或具有多個(gè) URL 的數(shù)組。 |
| style | null | 自定義樣式的字符串。應(yīng)用于正在打印的 html。 |
| scanStyles | true | 設(shè)置為 false 時(shí),庫(kù)將不會(huì)處理應(yīng)用于正在打印的 html 的樣式。在使用 css 參數(shù)時(shí)很有用。 |
| targetStyle | null | 默認(rèn)情況下,庫(kù)僅在打印 HTML 元素時(shí)處理某些樣式。此選項(xiàng)允許您傳遞要處理的樣式數(shù)組。例如:[‘padding-top’, ‘border-bottom’] |
| targetStyles | null | 與 targetStyle 相同,但是,這將處理任意范圍的樣式。例如:[‘border’, ‘padding’],將包括’border-bottom’、‘border-top’、‘border-left’、‘border-right’、‘padding-top’等。也可以通過(guò) [’*'] 來(lái)處理所有樣式。 |
| ignoreElements | [ ] | 傳入打印父 html 元素時(shí)應(yīng)忽略的 html id 數(shù)組。使其不打印。 |
| properties | null | 打印 JSON 時(shí)使用。這些是對(duì)象屬性名稱。 |
| gridHeaderStyle | ‘font-weight: bold;’ | 打印 JSON 數(shù)據(jù)時(shí)網(wǎng)格標(biāo)題的可選樣式。 |
| gridStyle | ‘border: 1px solid lightgray; margin-bottom: -1px;’ | 打印 JSON 數(shù)據(jù)時(shí)網(wǎng)格行的可選樣式。 |
| repeatTableHeader | TRUE | 打印 JSON 數(shù)據(jù)時(shí)使用。設(shè)置為 false 時(shí),數(shù)據(jù)表標(biāo)題將僅顯示在第一頁(yè)。 |
| showModal | null | 啟用此選項(xiàng)可在檢索或處理大型 PDF 文件時(shí)顯示用戶反饋。 |
| modalMessage | Retrieving Document…’ | 當(dāng) showModal 設(shè)置為 true 時(shí)向用戶顯示的消息。 |
| onLoadingStart | null | 加載 PDF 時(shí)要執(zhí)行的功能 |
| onLoadingEnd | null | 加載 PDF 后要執(zhí)行的功能 |
| documentTitle | Document’ | 打印 html、圖像或 json 時(shí),這將顯示為文檔標(biāo)題。 |
| fallbackPrintable | null | 打印 pdf 時(shí),如果瀏覽器不兼容(檢查瀏覽器兼容性表),庫(kù)將在新選項(xiàng)卡中打開(kāi) pdf。這允許您傳遞要打開(kāi)的不同pdf文檔,而不是在printable中傳遞的原始文檔。如果您在備用pdf文件中注入javascript,這可能很有用。 |
| onPdfOpen | null | 打印 pdf 時(shí),如果瀏覽器不兼容(檢查瀏覽器兼容性表),庫(kù)將在新選項(xiàng)卡中打開(kāi) pdf。可以在此處傳遞回調(diào)函數(shù),該函數(shù)將在發(fā)生這種情況時(shí)執(zhí)行。在某些情況下,如果要處理打印流、更新用戶界面等,它可能很有用。 |
| onPrintDialogClose | null | 在瀏覽器打印對(duì)話框關(guān)閉后執(zhí)行的回調(diào)函數(shù)。 |
| onError | error => throw error | 發(fā)生錯(cuò)誤時(shí)要執(zhí)行的回調(diào)函數(shù)。 |
| base64 | false | 在打印作為 base64 數(shù)據(jù)傳遞的 PDF 文檔時(shí)使用。 |
| honorMarginPadding (已棄用) | true | 這用于保留或刪除正在打印的元素中的填充和邊距。有時(shí)這些樣式設(shè)置在屏幕上很棒,但在打印時(shí)看起來(lái)很糟糕。您可以通過(guò)將其設(shè)置為 false 來(lái)將其刪除。 |
| honorColor (已棄用) | false | 若要以彩色打印文本,請(qǐng)將此屬性設(shè)置為 true。默認(rèn)情況下,所有文本都將以黑色打印。 |
| font(已棄用) | TimesNewRoman’ | 打印 HTML 或 JSON 時(shí)使用的字體。 |
| font_size (已棄用) | 12pt’ | 打印 HTML 或 JSON 時(shí)使用的字體大小。 |
| imageStyle(已棄用) | width:100%;’ | 打印圖像時(shí)使用。接受具有要應(yīng)用于每個(gè)圖像的自定義樣式的字符串。 |
二、安裝/引入
方法1.下載print.js
- 從官網(wǎng)下載print.js,將下載的 print.js 放入項(xiàng)目utils文件夾
- 可以全局引入即(在main.js中引入),也可以在需要的文件里面引入
import Print from './utils/print'
方法2.使用npm安裝print插件
- 安裝print-js
npm install print-js --save - 可以全局引入即(在main.js中引入),也可以在需要的文件里面引入
import Print from 'print-js'
三、使用-“html”類型
在表單頁(yè)面中調(diào)用打印方法
<template>
<div class="app-container">
<div id="printFrom">
<el-form :ref="formRef" :model="form" :rules="validateRules">
...
</el-form>
<el-button type="info" @click="handlePrint(printData)">打印</el-button>
</div>
</div>
</template>
<script>
export default {
data() {
return {
formRef: 'form',
validateRules: [],
printData: {
printable: 'printFrom',
header: '申請(qǐng)表',
ignore: ['no-print']
}
}
},
handlePrint(params) {
printJS({
printable: params.printable, // 'printFrom', // 標(biāo)簽元素id
type: params.type || 'html',
header: params.header, // '表單',
targetStyles: ['*'],
style: '@page {margin:0 10mm};', // 可選-打印時(shí)去掉眉頁(yè)眉尾
ignoreElements: params.ignore || [], // ['no-print']
properties: params.properties || null
})
}
}
}
</script>
點(diǎn)擊打印按鈕,彈出打印預(yù)覽界面,右邊欄調(diào)整打印界面。
假設(shè)出現(xiàn)打印不全的問(wèn)題,可以通過(guò)縮放來(lái)進(jìn)行設(shè)置,數(shù)值越小,縮放的越小。

四、其他Type示例
1.pdf
printJS('docs/printjs.pdf')
// 或
printJS({printable:'docs/printjs.pdf', type:'pdf', showModal:true})
2.image單個(gè)圖像
printJS('images/print-01-highres.jpg', 'image')
// 或
printJS({printable: 'images/print-01-highres.jpg', type: 'image', header: 'My cool image header'})
3.image多個(gè)圖像
printJS({
printable: ['images/print-01-highres.jpg', 'images/print-02-highres.jpg', 'images/print-03-highres.jpg'],
type: 'image',
header: 'Multiple Images',
imageStyle: 'width:50%;margin-bottom:20px;'
})
4.json
someJSONdata = [
{
name: 'John Doe',
email: 'john@doe.com',
phone: '111-111-1111'
},
{
name: 'Barry Allen',
email: 'barry@flash.com',
phone: '222-222-2222'
},
{
name: 'Cool Dude',
email: 'cool@dude.com',
phone: '333-333-3333'
}
]
printJS({
printable: someJSONdata,
properties: ['name', 'email', 'phone'],
type: 'json',
gridHeaderStyle: 'color: red; border: 2px solid #3971A5;',
gridStyle: 'border: 2px solid #3971A5;'
})
更多示例請(qǐng)參考Print.js官網(wǎng)。
總結(jié)
以上便是printjs插件的使用場(chǎng)景,希望對(duì)大家有所幫助。
到此這篇關(guān)于Vue中使用Printjs插件實(shí)現(xiàn)打印功能的文章就介紹到這了,更多相關(guān)Vue Printjs打印插件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue關(guān)于組件化開(kāi)發(fā)知識(shí)點(diǎn)詳解
在本篇文章里,小編給大家分享的是關(guān)于Vue關(guān)于組件化開(kāi)發(fā)知識(shí)點(diǎn)詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2020-05-05
Vue3使用vue-router如何實(shí)現(xiàn)路由跳轉(zhuǎn)與參數(shù)獲取
這篇文章主要介紹了Vue3使用vue-router如何實(shí)現(xiàn)路由跳轉(zhuǎn)與參數(shù)獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
Vue報(bào)錯(cuò)Syntax?Error:TypeError:?this.getOptions?is?not?a?
前幾天在vue運(yùn)行項(xiàng)目過(guò)程中報(bào)錯(cuò)了,所以下面這篇文章主要給大家介紹了關(guān)于Vue報(bào)錯(cuò)Syntax?Error:TypeError:?this.getOptions?is?not?a?function的解決方法,需要的朋友可以參考下2022-07-07
Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用(適合新手)
在Vue項(xiàng)目中導(dǎo)出Excel表格是常見(jiàn)的功能,特別是在后臺(tái)管理系統(tǒng)中,為了方便用戶將大量數(shù)據(jù)保存為本地文件,這篇文章主要給大家介紹了關(guān)于Vue3如何利用xlsx、xlsx-js-style導(dǎo)出Excel表格使用的相關(guān)資料,需要的朋友可以參考下2024-06-06
VUE中鼠標(biāo)滾輪使div左右滾動(dòng)的方法詳解
這篇文章主要給大家介紹了關(guān)于VUE中鼠標(biāo)滾輪使div左右滾動(dòng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
壓縮Vue.js打包后的體積方法總結(jié)(Vue.js打包后體積過(guò)大問(wèn)題)
大家都知道,Vuejs的 CLI工具 是基于 webpack 來(lái)實(shí)現(xiàn)的,所以在項(xiàng)目打包后,會(huì)生成的文件會(huì)很大。 主要原因是 webpack 將我們所有文件都打包成一個(gè)js文件,即使再小的項(xiàng)目,打包之后文件都會(huì)變得很大。 下面講講最近我遇到的相同問(wèn)題。2020-02-02

