前端預(yù)覽pdf文件流詳細(xì)步驟
1. PDF組件選型
通過查找資料,可以找到如下幾種方案,其中最為成熟的方案是vue-pdf
1. iframe 既可以用來瀏覽本地static下的文檔,也可以預(yù)覽后端返回的文件流文檔
2. vue-pdf 較為完善的vue預(yù)覽pdf的方案
3. vueshowpdf 網(wǎng)絡(luò)上找到的一個他人封裝的pdf組件
優(yōu)點(diǎn) | 缺點(diǎn) | 原理 | |
iframe/object/embed | 簡單易用,包含了翻頁,打印,縮放等內(nèi)嵌功能 | 無法禁止打印 | 將pdf作為插件內(nèi)嵌再這三個HTML標(biāo)簽內(nèi) |
vueshowpdf | 樣式簡單清爽,包含翻頁,縮放功能,可以禁止打印 | 在不修改源碼的情況下無法自定義相關(guān)樣式,無進(jìn)度加載提示,加載完成前會出現(xiàn)白屏 | 基于底層pdf.js實(shí)現(xiàn) |
vue-pdf | 樣式組件可自定義,包含加載進(jìn)度,翻頁,頁內(nèi)元素可交互等 | 固定寬高的比例,需要將包裹pdf的父容器盡可能調(diào)大才能顯示完全 | 基于pdf.js實(shí)現(xiàn) |
總結(jié)下來,
- 如果只想 簡單在頁面嵌套PDF,使用iframe/object/embed是最好的選擇,它不需要你自己去編寫翻頁組件,不需要去調(diào)整樣式,用戶體驗(yàn)佳。
- 如果對 樣式?jīng)]有定制化 的需求,使用 vueshowpdf 也是非常不錯,彈窗式的UI看起來會更加高大上。
- 如果對 權(quán)限控制,樣式定制需求高,使用 vue-pdf 是最好的選擇,接口和屬性較全,擴(kuò)展能力強(qiáng),自由度高。
2. Iframe使用步驟
2.1 使用與邏輯
邏輯:將后端返回的看不懂的文件流,設(shè)置成reponseType="arraybuffer",然后讀取到返回的blob,再使用createObjectURL讀取出url即可
2.2 代碼示例
<template> <iframe :src="src" frameborder="0" :style="iframeStyle" /> </template> <script> import { mapState } from 'vuex' import { getNodeObjectData } from '@/modules/viewer/apis/service' export default { name: 'pdfPanel', props: { node: { type: Object, default: () => {} } }, data() { return { src: '' } }, computed: { ...mapState({ innerHeight: (state) => state.viewerStore.setting['innerHeight'] }), iframeStyle() { return { width: '100%', height: `${this.innerHeight - 130}px` } } }, mounted() { return getNodeObjectData({ meta_id: this.node.id }) .then((res) => { const blob = new Blob([res], { type: 'application/pdf' }) const url = window.URL.createObjectURL(blob) this.src = url }) }, methods: { handleFullScreen() { window.open(`${this.src}#filename=${this.node.name}`, "_blank") } } } </script>>
2.3 圖文詳解
1. 后端返回的是文件流,如下:
2. 接口請求設(shè)置responseType="arraybuffer"
export function getNodeObjectData(params) { return axios({ url: `${apiPrefix}/pdf`, method: 'GET', params: params, responseType: 'arraybuffer' }) }
總結(jié)
到此這篇關(guān)于前端預(yù)覽pdf文件流的文章就介紹到這了,更多相關(guān)前端預(yù)覽pdf文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件的操作方法
這篇文章主要介紹了Vue讀取本地靜態(tài).md并側(cè)邊欄導(dǎo)航跳轉(zhuǎn)、展示.md文件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08Vue 3集成??礧eb插件實(shí)現(xiàn)視頻監(jiān)控功能
本文詳細(xì)介紹了如何使用 Vue 3 框架集成??礧eb插件實(shí)現(xiàn)視頻監(jiān)控功能,通過定義屬性、事件、變量,以及編寫初始化、播放視頻、處理節(jié)點(diǎn)點(diǎn)擊事件等方法,我們成功實(shí)現(xiàn)了視頻監(jiān)控系統(tǒng)的前端部分,感興趣的朋友一起看看吧2024-11-11Vue?Vuex搭建vuex環(huán)境及vuex求和案例分享
這篇文章主要介紹了Vue?Vuex搭建vuex環(huán)境及vuex求和案例分享,?Vue?中實(shí)現(xiàn)集中式狀態(tài)管理的一個?Vue?插件,對?vue?應(yīng)用中多個組件的共享狀態(tài)進(jìn)行集中式的管理,下文相關(guān)介紹,需要的朋友可以參考一下2022-04-04element-plus中el-upload組件限制上傳文件類型的方法
?Element Plus 中,el-upload 組件可以通過設(shè)置 accept 屬性來限制上傳文件的格式,這篇文章主要介紹了element-plus中el-upload組件限制上傳文件類型,需要的朋友可以參考下2024-02-02Vue+Elementui el-tree樹只能選擇子節(jié)點(diǎn)并且支持檢索功能
這篇文章給大家介紹了Vue+Element UI el-tree樹只能選擇子節(jié)點(diǎn)并且支持檢索的文章,通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-12-12使用Vue3+ElementPlus前端實(shí)現(xiàn)分片上傳的全過程
ElementPlus是一套為開發(fā)者、設(shè)計師和產(chǎn)品經(jīng)理準(zhǔn)備的基于Vue?3.0的組件庫,提供了配套設(shè)計資源,幫助你的網(wǎng)站快速成型,下面這篇文章主要給大家介紹了關(guān)于使用Vue3+ElementPlus前端實(shí)現(xiàn)分片上傳的相關(guān)資料,需要的朋友可以參考下2022-11-11Vue中import與@import的區(qū)別及使用場景說明
這篇文章主要介紹了Vue中import與@import的區(qū)別及使用場景說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06