vue-pdf预览pdf文件问题

项目用到pdf预览,试了pdf-dist和vue-pdf,总结下来,vue-pdf更好用。
具体文档https://www.npmjs.com/package/vue-pdf

安装

npm i vue-pdf

具体用法

<template>
    <div>
        <div id="tools">
            <div class="flex">
                <div class="flex-1" @click="previous">
                    <span class="iconfont fz-24 text-6 tool">&#xe615;</span>
                </div>
                <div class="flex-1" @click="next">
                    <span class="iconfont fz-24 text-6 tool">&#xe616;</span>
                </div>
                <div class="flex-1" @click="scaleD">
                    <span class="iconfont fz-24 text-6 tool">&#xe65d;</span>
                </div>
                <div class="flex-1" @click="scaleX">
                    <span class="iconfont fz-24 text-6 tool">&#xe607;</span>
                </div>
            </div>
        </div>
        <div id="container">
            <pdf :src="pdfSrc" :page="currentPage" :roate="rotate" @progress="onprogress" @num-pages="pageCount = $event" @page-loaded="loadPage" @loaded="loadPdfHandler" @error="loadError" ref="wrapper" class="pdf h-100"></pdf>
        </div>

        <van-overlay :show="showLoading" :z-index="3000">
            <div class="h-100 flex-center">
                <van-loading size="24px" type="spinner" vertical>已加载{{process}}%</van-loading>
            </div>
        </van-overlay>
    </div>
</template>

<script>
import pdf from 'vue-pdf'

export default {
    components: {
        pdf
    },

    data () {
        return {
            currentPage: 1,
            pageCount: 0,
            src: "", // pdf文件地址
            scale: 100, //放大系数
            idx: -1,
            clauseTitle: "",
            loadedRatio: 0,
            rotate: 0,

            showLoading: false,
            process: 0,
            pdfSrc: '',
        }
    },

    created () {
        
    },

    methods: {
        // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
        changePdfPage(val) {
            if(val === 0 && this.currentPage > 1) {
                this.currentPage--;
            }
            if(val === 1 && this.currentPage < this.pageCount) {
                this.currentPage++;
            }
        },
        goBack() {
            this.$router.go(-1);
        },

        loadPage (e){
            // console.log(e);
        },

        // 上一页
        previous (){
            if (this.currentPage == 1) return
            this.currentPage -= 1
        },

        // 下一页
        next (){
            if (this.currentPage == this.pageCount) return
            this.currentPage += 1
        },

        // pdf加载时
        loadPdfHandler(e) {            
            this.currentPage = 1; // 加载的时候先加载第一页
        },
        onprogress (e){
            // console.log(e);
            this.showLoading = true
            this.process = (e*100).toFixed(0)
            if (e == 1){
                this.showLoading = false
            }
        },

        // 加载失败
        loadError (e){
            console.log(123);
            
            console.log(e); 
        },

        //放大
        scaleD() {
            this.scale += 5;
            // this.$refs.wrapper.$el.style.transform = "scale(" + this.scale + ")";
            this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
        },

        //缩小
        scaleX() {
            if(this.scale == 100) {
                return;
            }
            this.scale += -5;
            this.$refs.wrapper.$el.style.width = parseInt(this.scale) + "%";
            // this.$refs.wrapper.$el.style.transform = "scale(" + this.scale + ")";
        }
    },

    activated (){
        let pdfurl = this.$route.params.url
        console.log(pdfurl);
        
        
        if (pdfurl){
            this.pdfSrc = decodeURIComponent(pdfurl)
        }else {
            this.$toast('无效的pdf')
            this.$router.go(-1)
        }
    },
}
</script>

<style lang="less" scoped>
#container {
    margin-top: 52px;
    text-align: center;
    overflow: auto;
}

#tools {
    background: white;
    position: fixed;
    z-index: 9;
    width: 100%;
    height: 51px;
    overflow: hidden;
    top: 0;
    left: 0;
    text-align: center;
    border-bottom: 1px solid #eee;

    .tool{
        height: 51px;
        line-height: 51px;
    }
}
</style>

如果pdf中存在电子签章的话,控制台会报错

Warning: Unimplemented widget field type "Sig", falling back to base field type. 
解决办法,找到node_modules里pdf-dist/build/pdf.worker.js,搜索AnnotationFlag.HIDDEN,找到类型下面的代码, 把那行注释掉即可。
if (data.fieldType === 'Sig') {
      data.fieldValue = null;
      // 此行注释掉即可
      // _this3.setFlags(_util.AnnotationFlag.HIDDEN);
    }

    return _this3;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容