vue預(yù)覽本地pdf文件方法之vue-pdf組件使用
1、npm安裝
npm install --save vue-pdf
2、頁(yè)面引入
3、具體實(shí)現(xiàn)
<div class="pdf" v-show="fileType === 'pdf'"> <p class="arrow"> <span @click="changePdfPage(0)" class="turn" :class="{grey: currentPage==1}">Preview</span> {{currentPage}} / {{pageCount}} <span @click="changePdfPage(1)" class="turn" :class="{grey: currentPage==pageCount}">Next</span> </p> <pdf :src="pdfSrc" :page="currentPage" @num-pages="pageCount=$event" @page-loaded="currentPage=$event" @loaded="loadPdfHandler"> </pdf> </div>
4、method方法
// 改變PDF頁(yè)碼,val傳過(guò)來(lái)區(qū)分上一頁(yè)下一頁(yè)的值,0上一頁(yè),1下一頁(yè) changePdfPage (val) { // console.log(val) if (val === 0 && this.currentPage > 1) { this.currentPage-- // console.log(this.currentPage) } if (val === 1 && this.currentPage < this.pageCount) { this.currentPage++ // console.log(this.currentPage) } }, // pdf加載時(shí) loadPdfHandler (e) { this.currentPage = 1 // 加載的時(shí)候先加載第一頁(yè) },
5、完整代碼
<template> <div> <div style="text-align: left;"> <H2>行業(yè)資料</H2> <el-divider> </el-divider> <el-container> <el-aside width="300px" style="border: 1px solid #eee;height: 1000px; background-color: #D3DCE6;"> <div class="myTree"> <el-tree default-expand-all :props="defaultProps" :data="tableData" @node-click="handleNodeClick"></el-tree> </div> </el-aside> <el-container style="border: 1px solid #eee;margin-left: 10px;"> <div class="pdf" v-show="fileType === 'pdf'"> <p class="arrow"> <span :class="{grey: currentPage==1}" @click="changePdfPage(0)" class="turn">Preview</span> {{currentPage}} / {{pageCount}} <span :class="{grey: currentPage==pageCount}" @click="changePdfPage(1)" class="turn">Next</span> </p> <pdf :page="currentPage" :src="pdfSrc" @loaded="loadPdfHandler" @num-pages="pageCount=$event" @page-loaded="currentPage=$event"> </pdf> </div> </el-container> </el-container> </div> </div> </template>
<script> import pdf from 'vue-pdf' export default { name: "IndustryInformation", components: {pdf}, data(){ return { currentPage: 0, // pdf文件頁(yè)碼 pageCount: 0, // pdf文件總頁(yè)數(shù) fileType: 'pdf', // 文件類型 pdfSrc: '', // pdf文件地址 defaultProps: { children: 'children', label: 'name' }, tableData: [{ id: 1, name: '道路工程資料', children:[ { id: 2, name: '公路工程資料編制概述', children:[ { id: 21, name: '路面工程部分分項(xiàng)劃分表', src: '/1.pdf', }, { id: 13, name: '一般建設(shè)項(xiàng)目單位工程劃分表', src: '/2.pdf', }, { id: 14, name: '路基工程部分分項(xiàng)劃分表', src: '/3.pdf', }, { id: 33, name: '橋梁工程部分分項(xiàng)劃分表', src: '/4.pdf', }, { id: 34, name: '隧道工程部分分項(xiàng)劃分表', src: '/5.pdf', } ] }, { id: 3, name: '公路工程竣工資料', children:[ { id: 7, name: '公路工程竣工文件編排層次', src: '/5.pdf', }, { id: 8, name: '工程洽商記錄表', src: '/4.pdf', }, { id: 9, name: '工程設(shè)計(jì)表更、洽商一覽表', src: '/3.pdf', } ] } ]}] } }, methods:{ // 改變PDF頁(yè)碼,val傳過(guò)來(lái)區(qū)分上一頁(yè)下一頁(yè)的值,0上一頁(yè),1下一頁(yè) changePdfPage(val) { // console.log(val) if (val === 0 && this.currentPage > 1) { this.currentPage-- // console.log(this.currentPage) } if (val === 1 && this.currentPage < this.pageCount) { this.currentPage++ // console.log(this.currentPage) } }, // pdf加載時(shí) loadPdfHandler(e) { this.currentPage = 1 // 加載的時(shí)候先加載第一頁(yè) }, handleNodeClick(data) { this.pdfSrc = data.src; } } } </script>
<style scoped> .myTree /deep/ .el-tree { position: relative; cursor: default; color: #606266; background-color: #D3DCE6; } </style>
6、最終效果
后記:
主要是priview和next翻頁(yè)不是我想要的效果,因此只能另尋它法。
注意:
pdf文件需要放在public路徑下任意文件夾中,不支持相對(duì)路徑
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue實(shí)現(xiàn)PDF文件預(yù)覽的方法詳解
- vue-pdf如何通過(guò)文件流預(yù)覽pdf文件
- vue如何在線預(yù)覽各類型文件
- 如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)
- vue2.0如何借用vue-pdf實(shí)現(xiàn)在線預(yù)覽pdf文件
- 詳解vue2如何實(shí)現(xiàn)點(diǎn)擊預(yù)覽本地文件
- Vue如何實(shí)現(xiàn)文件預(yù)覽和下載功能的前端上傳組件
- Vue實(shí)現(xiàn)微信小程序中預(yù)覽文件的縮放功能
- vue3中做文件預(yù)覽的項(xiàng)目實(shí)踐
相關(guān)文章
Vue infinite update loop的問(wèn)題解決
這篇文章主要介紹了Vue "...infinite update loop..."的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04Vue項(xiàng)目中如何使用Axios封裝http請(qǐng)求詳解
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中如何使用Axios封裝http請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10vue element-ui實(shí)現(xiàn)input輸入框金額數(shù)字添加千分位
這篇文章主要介紹了vue element-ui實(shí)現(xiàn)input輸入框金額數(shù)字添加千分位,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12基于Vue2實(shí)現(xiàn)動(dòng)態(tài)折扣表格
這篇文章主要為大家詳細(xì)介紹了如何基于Vue2實(shí)現(xiàn)動(dòng)態(tài)折扣表格,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01vue-cli創(chuàng)建的項(xiàng)目,配置多頁(yè)面的實(shí)現(xiàn)方法
下面小編就為大家分享一篇vue-cli創(chuàng)建的項(xiàng)目,配置多頁(yè)面的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Vue組件間通信方法總結(jié)(父子組件、兄弟組件及祖先后代組件間)
這篇文章主要給大家介紹了關(guān)于Vue組件間通信的相關(guān)資料,其中包括父子組件、兄弟組件及祖先后代組件間的通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Vue實(shí)現(xiàn)實(shí)時(shí)刷新時(shí)間的功能
這篇文章主要為大家詳細(xì)介紹了如何Vue利用實(shí)現(xiàn)實(shí)時(shí)刷新時(shí)間的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下2023-12-12vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程
Vue從template到render函數(shù)的轉(zhuǎn)換經(jīng)歷模板解析、AST構(gòu)建、優(yōu)化、生成渲染函數(shù)等步驟,首先進(jìn)行詞法分析將模板拆解為tokens,再進(jìn)行語(yǔ)法分析構(gòu)建AST,然后對(duì)AST進(jìn)行靜態(tài)標(biāo)記和提升優(yōu)化,最后轉(zhuǎn)換成JavaScript渲染函數(shù),生成虛擬DOM,完成組件的渲染和更新,實(shí)現(xiàn)了模板的高效轉(zhuǎn)化2024-10-10