vue 前端文件在线预览 vue-pdf 预览pdf文件,mammoth预览docx文件

浏览器在线预览文件,可能基于后端来做效果会更好,前端的话,预览pdf还行,其他就感觉一般了,甚至有的很难支持。
本文之说pdf文件和docx文件的预览
ps:图片预览就不说了哈,浏览器天然的支持 (=
言归正传,其实借助插件,用起来也简单的,麻烦的地方插件都帮你写好了
但是插件体积比较大,所以该功能慎用吧,除非真的需要。vue-pdf插件,生产环境生产的插件代码800kb左右,如果项目并么有必须要这个功能,我觉得还是不要用了。
基于vue-cli创建的vue项目演示

首先安装依赖

npm i vue-pdf mammoth axios --save

创建file-over-view.vue文件

在项目中创建 路由页面文件file-over-view.vue,并且配置好路由,我这里配置实例如下

 {
        path: '/file-over-view',
        name: 'FileOverView',
        component: () => import( /* webpackChunkName: "FileOverView" */'../views/file-over-view/file-over-view.vue'),
    },

然后直接上file-over-view.vue的代码吧,比较感觉真没啥说的

<!--FileOverView-->
<template>
    <div class="fileOverViewBox">
        <div class="fileOverViewContentBox">
            <div v-if="fileType==='pdf'">
                <div style="height:60px;">
                    <div class="arrow rowCenter">
                        <span @click="changePdfPage(0)" class="turn" :class="{grey: currentPage===1}">上一页</span>
                        <div class="pageBox rowCenter">
                            <span> {{currentPage}}</span>
                            <span>/</span>
                            <span>{{pageCount}}</span>
                        </div>
                        <span @click="changePdfPage(1)" class="turn" :class="{grey: currentPage===pageCount}">下一页</span>
                    </div>
                </div>
                <pdf
                        :src="src"
                        :page="currentPage"
                        @num-pages="pageCount=$event"
                        @page-loaded="currentPage=$event"
                        @loaded="loadPdfHandler">
                </pdf>
            </div>
            <div v-if="/docx/.test(fileType)" v-html="viewHtml" class="docViewBox"></div>

        </div>

    </div>
</template>

<script>
    import pdf from 'vue-pdf'
    import mammoth from 'mammoth'
    import axios from 'axios'
    export default {
        name: 'FileOverView',
        components: {
            pdf
        },
        data () {
            return {
                currentPage: 0, // pdf文件页码
                pageCount: 0, // pdf文件总页数
                fileType: '', // 文件类型 src: '', // pdf文件地址
                src: '', // pdf文件地址
                viewHtml:'',//网页字符串
            }
        },
        async created(){ // 有时PDF文件地址会出现跨域的情况,这里最好处理一下
            let {url}=this.$route.query
            let fileName=url.split('/')[url.split('/').length-1]
            this.fileType=fileName.split('.')[1]
            if(/pdf/.test(this.fileType)){
                this.src = pdf.createLoadingTask(url)
            }else if(/docx/.test(this.fileType)){
                let res=await axios({
                    url,
                    withCredentials:false,
                    responseType:'arraybuffer'
                })
                mammoth.convertToHtml({arrayBuffer: res.data})
                    .then(result=>{
                        console.log(result.value)
                        this.viewHtml=result.value
                    })
                    .done()

            }else {
                alert('文件格式不支持,仅支持pdf,docx文件预览')
            }
        },
        methods: {
            // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
            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加载时
            loadPdfHandler(e) {
                this.currentPage = 1 // 加载的时候先加载第一页
            }

        }
    }
</script>

<style scoped lang="scss">
    .fileOverViewBox{
        background:#000000;
        min-width:100vh;
        .fileOverViewContentBox{
            width:1000px;
            margin:0 auto;
            background:#ffffff;
            .arrow{
                position: fixed;
                width:100%;
                height:60px;
                z-index: 100;
                -webkit-box-shadow: 0 2px 2px rgba(0,0,0,0.5);
                -moz-box-shadow: 0 2px 2px rgba(0,0,0,0.5);
                box-shadow:  0 2px 2px rgba(0,0,0,0.5);
                background:rgba(255,255,255,0.9);
                .turn{
                    cursor:pointer;
                    &:hover{
                        color:#58A5FE;
                    }
                }
                .pageBox{
                    margin:0 20px;
                }
            }
            .docViewBox{
                padding:20px;
            }
        }
    }


</style>

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

推荐阅读更多精彩内容