最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)

 更新時(shí)間:2024年03月21日 11:13:04   作者:幸福淺曖  
這篇文章主要介紹了如何用vue-pdf包實(shí)現(xiàn)pdf文件預(yù)覽,支持分頁(yè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue項(xiàng)目實(shí)現(xiàn)pdf文件預(yù)覽功能

下載vue-pdf包

npm install --save vue-pdf

template模板內(nèi)容:

//pdf組件
<pdf :src="pdfFile" 
	:page="currentPage" 
	@num-pages="pageCount=$event" 
	@page-loaded="currentPage=$event" 
	@loaded="loadPdf">
</pdf>

//分頁(yè)
<div class="pageButton">
      <el-button size="mini" @click="changePage(0)" round>上一頁(yè)</el-button>
      <span> {{currentPage}} / {{pageCount}} </span>
      <el-button size="mini" @click="changePage(1)" round>下一頁(yè)</el-button>
</div>

引入組件,定義變量

//vue文件內(nèi)導(dǎo)入并引用
import pdf from "vue-pdf";
export default {
	components: {
	    pdf,
	 },
	
	//定義變量
	data(){
		return {
			pdfFile: "", //pdf文件地址
	      	currentPage: 0, // 頁(yè)碼
	      	pageCount: 0, // 總頁(yè)數(shù)
		}
	},
	methods:{
		// 翻頁(yè)
	    changePage (val) {
	      	if (val === 0 && this.currentPage > 1) {
	        	this.currentPage --;
	      	}
	      	if (val === 1 && this.currentPage < this.pageCount) {
	        	this.currentPage ++;
	      	}
	    },
      	// pdf加載時(shí)
	    loadPdf () {
	      	this.currentPage = 1 // 加載的時(shí)候先加載第一頁(yè)
	    },
	}
}

vue-pdf實(shí)現(xiàn)pdf在線(xiàn)預(yù)覽

1、首先安裝vue-pdf ,在命令行中輸入如下代碼:

npm install --save vue-pdf

2、頁(yè)面引用,新建index.vue

<template>
    <div class="ins-submit-docs-content ins-submit-docs-pdf">
        <div v-if="loading" style="position: absolute; top: 40%; width: 100%;text-align: center;">
            <van-loading type="spinner" color="#fc8955" />
        </div>
        <van-empty description="文檔加載失敗" v-if="loadingError" />
            <pdf ref="morePDF" :src="src"></pdf>
    </div>
</template>
<script>
import Vue from 'vue';
import pdf from 'vue-pdf'
import { Loading } from 'vant';
Vue.use(Loading);
 
export default {
    name : 'ins-docs-pdf',
    props : {
        src : {
            type : String,    //默認(rèn)值,選中值
            default : ''
        }
    },
    data(){
        return {
            loading : true,    //加載中
            loadingError : false,    //加載失敗
        }
    },
    watch : {
        src : {
            deep : true,
            immediate: true,
            handler(val){
                if(val){
                    this.getPDFnums(val)
                }
            }
        }
    },
    components: {
        pdf
    },
    methods:{
        //計(jì)算pdf頁(yè)碼總數(shù)
        getPDFnums(url) {
            this.loading = true
            //let loadURL = pdf.createLoadingTask(url)
            let loadURL = pdf.createLoadingTask({
                  url: url,//你的pdf地址
            })
 
            loadURL.promise.then(pdf => {
                this.$set(this, 'docsPDF.numPages', pdf.numPages)
                this.loading = false
            }).catch(err => {
                this.loading = false;
                this.loadingError = true;
            })
        }
    }
}
</script>

3、當(dāng)PDF 有很多頁(yè)的時(shí)候,直接v-for 循環(huán),直接顯示完

<template>
    <div class="ins-submit-docs-content ins-submit-docs-pdf">
        <div v-if="loading" style="position: absolute; top: 40%; width: 100%;text-align: center;">
            <van-loading type="spinner" color="#fc8955" />
        </div>
        <van-empty description="文檔加載失敗" v-if="loadingError" />
        <pdf ref="morePDF" :src="src" :page="i" v-for="i in numPages" :key="i"></pdf>
    </div>
</template>
<script>
import Vue from 'vue';
import pdf from 'vue-pdf'
import { Loading } from 'vant';
Vue.use(Loading);
 
export default {
    name : 'ins-docs-pdf',
    props : {
        src : {
            type : String,    //默認(rèn)值,選中值
            default : ''
        }
    },
    data(){
        return {
            loading : true,    //加載中
            loadingError : false,    //加載失敗
            numPages : 0,        
        }
    },
    watch : {
        src : {
            deep : true,
            immediate: true,
            handler(val){
                if(val){
                    this.getPDFnums(val)
                }
            }
        }
    },
    components: {
        pdf
    },
    methods:{
        //計(jì)算pdf頁(yè)碼總數(shù)
        getPDFnums(url) {
            this.loading = true
            //let loadURL = pdf.createLoadingTask(url)
            let loadURL = pdf.createLoadingTask({
                  url: url,//你的pdf地址
            })
 
            loadURL.promise.then(pdf => {
                this.numPages = pdf.numPages
                this.$set(this, 'docsPDF.numPages', pdf.numPages)
                this.loading = false
            }).catch(err => {
                this.loading = false;
                this.loadingError = true;
            })
        }
    }
}
</script>

4、當(dāng)PDF很大的時(shí)候,你會(huì)發(fā)現(xiàn)PDF加載回很慢,并且偶爾會(huì)跳出加載;

這時(shí)就用到了下邊的代碼;PDF分頁(yè)展示;

并且解決PDF預(yù)覽的時(shí)候偶爾中文會(huì)亂碼,借用VUE-PDF中CMapReaderFactory

<template>
    <div class="ins-submit-docs-content ins-submit-docs-pdf">
        <div v-if="loading" style="position: absolute; top: 40%; width: 100%;text-align: center;">
            <van-loading type="spinner" color="#fc8955" />
        </div>
        <van-empty description="文檔加載失敗" v-if="loadingError" />
        <div v-show="numPages <= 50">
            <pdf ref="morePDF" :src="src" :page="i" v-for="i in numPages" :key="i"></pdf>
        </div>
        <div v-show="numPages > 50">
            <pdf ref="PDF" :src="src" :page="currentPage" @num-pages="numPages=$event" @loaded="loadPdfHandler"></pdf>
            <div class="ins-pdf-button-box">
                <span @click.stop="prePage">上一頁(yè)</span>
                <span>{{currentPage}}/{{numPages}}</span>
                <span @click.stop="nextPage">下一頁(yè)</span>
            </div>
        </div>
    </div>
</template>
<script>
import Vue from 'vue';
import pdf from 'vue-pdf'
import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js';
import { Loading } from 'vant';
Vue.use(Loading);
 
export default {
    name : 'ins-docs-pdf',
    props : {
        src : {
            type : String,    //默認(rèn)值,選中值
            default : ''
        }
    },
    data(){
        return {
            loading : true,    //加載中
            loadingError : false,    //加載失敗
            numPages : 0,        //分頁(yè)
            currentPage : 1, //當(dāng)前顯示頁(yè)數(shù)
        }
    },
    watch : {
        src : {
            deep : true,
            immediate: true,
            handler(val){
                if(val){
                    this.getPDFnums(val)
                }
            }
        }
    },
    components: {
        pdf
    },
    methods:{
        //計(jì)算pdf頁(yè)碼總數(shù)
        getPDFnums(url) {
            this.loading = true
            //let loadURL = pdf.createLoadingTask(url)
            let loadURL = pdf.createLoadingTask({
                  url: url,//你的pdf地址
                  CMapReaderFactory
            })
 
            loadURL.promise.then(pdf => {
                this.numPages = pdf.numPages
                this.currentPage = 1
                this.$set(this, 'docsPDF.numPages', pdf.numPages)
                this.loading = false
            }).catch(err => {
                this.loading = false;
                this.loadingError = true;
            })
        },
 
        // 上一頁(yè)
        prePage() {
            var page = this.currentPage
            page = page > 1 ? page - 1 : this.numPages
            this.currentPage = page
        },
 
        // 下一頁(yè)
        nextPage() {
            var page = this.currentPage
            page = page < this.numPages ? page + 1 : 1
            this.currentPage = page
        },
 
        // 回調(diào)
        loadPdfHandler(e) {
            this.currentPage = e
        }
    }
}
</script>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue Router路由無(wú)法跳轉(zhuǎn)問(wèn)題匯總

    Vue Router路由無(wú)法跳轉(zhuǎn)問(wèn)題匯總

    這篇文章主要介紹了Vue Router路由無(wú)法跳轉(zhuǎn)問(wèn)題匯總,在這里我整理了部分Vue Router路由無(wú)法跳轉(zhuǎn)問(wèn)題,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • vue中的require使用

    vue中的require使用

    require是node中的一個(gè)方法,他的作用是用于引入模塊、 JSON、或本地靜態(tài)文件,這篇文章主要介紹了vue中的require使用,需要的朋友可以參考下
    2023-08-08
  • 在項(xiàng)目中封裝axios的實(shí)戰(zhàn)過(guò)程

    在項(xiàng)目中封裝axios的實(shí)戰(zhàn)過(guò)程

    這篇文章主要給大家介紹了關(guān)于如何在項(xiàng)目中封裝axios的相關(guān)資料,axios 請(qǐng)求的封裝,無(wú)非是為了方便代碼管理,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 應(yīng)用provide與inject刷新Vue頁(yè)面方法

    應(yīng)用provide與inject刷新Vue頁(yè)面方法

    這篇文章主要介紹了應(yīng)用provide與inject刷新Vue頁(yè)面的兩種方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,多多進(jìn)步,祝大家早日升職加薪
    2021-09-09
  • 解決vuex改變了state的值,但是頁(yè)面沒(méi)有更新的問(wèn)題

    解決vuex改變了state的值,但是頁(yè)面沒(méi)有更新的問(wèn)題

    這篇文章主要介紹了解決vuex改變了state的值,但是頁(yè)面沒(méi)有更新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Vue實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    Vue實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 一文詳解Vue中nextTick的原理與作用

    一文詳解Vue中nextTick的原理與作用

    Vue的nextTick方法是用于在DOM更新后執(zhí)行回調(diào)的工具函數(shù),它的作用是在當(dāng)前JavaScript執(zhí)行環(huán)境中延遲執(zhí)行回調(diào),以確保在下次DOM更新循環(huán)之前,可以訪問(wèn)到更新后的DOM,本文就給大家介紹一下Vue nextTick原理與作用,需要的朋友可以參考下
    2023-08-08
  • vuex中的5個(gè)屬性使用方法舉例講解

    vuex中的5個(gè)屬性使用方法舉例講解

    vuex是專(zhuān)門(mén)為Vue.js應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式,下面這篇文章主要給大家介紹了關(guān)于vuex中5個(gè)屬性使用方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Vue路由 重定向和別名的區(qū)別說(shuō)明

    Vue路由 重定向和別名的區(qū)別說(shuō)明

    這篇文章主要介紹了Vue路由 重定向和別名的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue實(shí)現(xiàn)上傳圖片添加水印

    vue實(shí)現(xiàn)上傳圖片添加水印

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)上傳圖片添加水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評(píng)論

永和县| 惠安县| 肇庆市| 江油市| 丹东市| 万载县| 六盘水市| 开封市| 宜君县| 维西| 孟连| 图木舒克市| 广宁县| 福泉市| 台北县| 饶河县| 元氏县| 科技| 周至县| 武隆县| 昌邑市| 启东市| 梁山县| 洪湖市| 五华县| 隆回县| 襄汾县| 昆明市| 松原市| 瑞丽市| 友谊县| 锦屏县| 谢通门县| 辰溪县| 满洲里市| 峨眉山市| 辽中县| 南华县| 大埔区| 沂南县| 兴宁市|