Vue-pdf实现在线预览PDF文件

本文介绍如何在Vue项目中使用vue-pdf组件实现PDF文件的在线预览功能,包括安装依赖、配置参数及实现代码示例。

前言

在大多数项目中都会遇到在线预览PDF文件,项目使用的是element ui,使用vue-pdf实现。

安装依赖

npm install --save vue-pdf
相关参数

参数介绍:

  • url :pdf 文件的路径,可以是本地路径,也可以是在线路径。
  • page: 当前显示的页数,比如第一页page=1
  • rotate : 旋转角度,比如0就是不旋转,+90,-90 就是水平旋转。
  • progress :当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了。
  • page-loaded :页面加载成功的回调函数,不咋能用到。
  • num-pages :总页数
  • error :加载错误的回调
  • link-clicked:单机pdf内的链接会触发。
  • print 这个是打印函数。 注意:谷歌浏览器会出现乱码,这个和字体有关系。

实现

<template>
    <div>
        <el-row>
            <el-button @click="onPreview" size="small">预览</el-button>
        </el-row>
        <el-dialog title="预览合同附件" :visible.sync="viewVisible" center width="60%" @close='closePreview'>
            <el-row :gutter="20">
                <span>共{{pageCount}}页, 当前第 {{pdfPage}} 页 </span>
                <el-button type="text" size="mini" @click.stop="previousPage">上一页</el-button>
                <el-button type="text" size="mini" @click.stop="nextPage">下一页</el-button>
            </el-row>
            <div>
                <pdf :src="src" :page="pdfPage" @num-pages="pageCount = $event" @page-loaded="pdfPage = $event" style="display: inline-block; width: 100%"></pdf>
            </div>
        </el-dialog>
    </div>
</template>
<script>
import pdf from 'vue-pdf'
import store from '@/store/'
export default {
    components:{
        pdf
    },
    data(){
        return {
            viewVisible: false,
            src: null,
            pdfPage : 1,
            pageCount: 0,
            token: store.getters.access_token,
        }
    },
    methods:{
        onPreview(){
            this.src = pdf.createLoadingTask({
                url: 'http://localhost:8082/file/demo.pdf',
                httpHeaders: {Authorization:'Bearer '+ this.token}
            });
            this.src.promise.then(pdf => {
                this.viewVisible = true;
            });
        },
        closePreview(){
            this.pdfPage = 1;
        },
        previousPage(){
            let p = this.pdfPage
            p = p > 1 ? p-1 : this.pageCount
            this.pdfPage = p
        },
        nextPage(){
            let p = this.pdfPage
            p = p < this.pageCount ? p+1 : 1
            this.pdfPage = p
        }
    }
}
</script>   

效果

在这里插入图片描述

注意点

1、URL

url为文件地址路径

this.src = pdf.createLoadingTask({
    url: 'http://localhost:8082/file/demo.pdf',
});

2、设置请求头

可以通过httpHeaders来设置token等参数

 httpHeaders: {Authorization:'Bearer '+ this.token}

3、src

这点比较重要,网上很多帖子都是这样的

this.src.then(pdf => {
    this.viewVisible = true;
})

会报错 TypeError: this.src.then is not a function

TypeError: this.src.then is not a function
    at VueComponent.onPreview (index.vue?6ced:241)
    at click (index.vue?aaff:261)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at VueComponent.invoker (vue.runtime.esm.js?2b0e:2179)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at VueComponent.Vue.$emit (vue.runtime.esm.js?2b0e:3888)
    at VueComponent.handleClick (element-ui.common.js?5c96:9413)
    at invokeWithErrorHandling (vue.runtime.esm.js?2b0e:1854)
    at HTMLButtonElement.invoker (vue.runtime.esm.js?2b0e:2179)
    at HTMLButtonElement.original._wrapper (vue.runtime.esm.js?2b0e:6917)

正确的是这样的

this.src.promise.then(pdf => {
    this.viewVisible = true;
});
一、增加菜单项目 ----1.首先,决定您要增加到菜单中的文件类型,以及启动这类文件的应用程序。如果是某些在启动时会自动打开的新文件或让您可以立即使用的应用程序,如记事本、写字板或画图等,就不需要特别的准备工作。但如果是在启动时不会自动打开文件的应用程序,您必须依需求建立一个通用的文件范本,并将它保存在Windows中的ShellNew文件夹中。此文件夹在某些系统中是隐藏的,所以您可能必须先选择“查看”*“文件夹选项”,在“查看”选项卡中选取“显示所有文件”选项,单击“确定”即可。 ----2.选择“开始”*“运行”,输入“regedit”,打开注册表编辑器。单击 “HKEY_CLASSES_ROOT”旁边的“+”号,可以看到左边窗口中有一排文件夹,都是以Windows中应用程序建立的文件的后缀名命名的 (如.doc、.xls和.html等)。找出您要增加到“新建”菜单中的文件类型的后缀名,单击鼠标右键,选择“新建”*“主键”(在注册表中,每个文件夹都是一个主键),将新的主键取名为“ShellNew”。选取新建的主键,在右边视窗空白处单击鼠标右键,选择“新增”*“字符串值”。如果您使用的文件类型,其程序预设为在启动时打开空白文件,就将新字符串名称设定为“NullFile”; 如果您使用的文件类型,其程序在启动时不会自动打开空白文件的话,请将新字符串名称设定为“FileName”。双击“FileName”字符串图标(或选中后按Enter键),在“编辑字符串”对话框的“键值”文本框中输入文件类型范本的完整路径及名称。然后按确定,退出注册表编辑器。您可以立刻在“新建”菜单的文件列表中看到所做的修改。 ----以下是一个范例,要在桌面上或在文件夹中按右键建立新的Outlook Express 邮件。启动Outlook Express,选择“文件”*“新建”*“邮件”,再加入要放在邮件中的文字,然后选取“文件”*“另存为”,将邮件以“blank”的名称保存在\\ Windows\\ShellNew文件夹中,Outlook Express 会自动为邮件加上.eml扩展名。接下来,依照前面的说明启动注册表编辑器,在HKEY_CLASSES_ROOT中找出.eml的文件夹,建立 “ShellNew”主键,在此主键中新建一个字符串值,并将其名称设定为“FileName”。双击“FileName”字符串,在“编辑字符串”对话框的“键值”文本框中输入“C:\\Windows\\ShellNew\\blank.eml”(您可以自行设定路径和名称)。按下“确定”按钮,退出注册表编辑器即可。此时,您可以在桌面上按鼠标右键,选择“新建”*“Outlook Express Mail Message”(如附图所示)。桌面上就会出现一个新邮件图标,输入新邮件文件的名称并按下Enter键。双击新邮件的图标,输入邮件内容,完成之后,按下“发送”按钮即可。这一方法可用来建立电子邮件,并将邮件副本保存在Outlook Express(或其他类似的邮件程序)之外。 二、删除菜单项目 ----有许多种方法可以删除“新建”菜单中的文件类型列表,以下是3种方法。 ----1.删除您不使用的程序的文件类型,最好是卸载整个应用程序。可以利用“控制面板”中的“添加/删除程序”功能。此操作同时会将“新建”菜单的文件列表中的相应项目删除。 ----2.如果您自行卸载软件后,该文件类型的菜单选项仍然存在,请进入资源管理器选择“查看”*“文件夹选项”,单击“文件类型”选项卡,选取您不再使用的文件类型,单击“删除”按钮,确认删除。如此可将文件类型从关联文件菜单、注册表以及“新建”菜单中删除。 ----3.如果您需要保留与文件类型相关的应用程序,只想删除“新建”菜单中的图标,请按前面说明打开注册表编辑器。单击 “HKEY_CLASSES_ROOT”前的“+”号,找出含有您要删除的文件类型的扩展名的文件夹,单击旁边的“+”号。在左边的树状图中,选取正确扩展名下的“ShellNew”文件夹。此时,您可以制作一个此注册表分支的备份,以便您恢复原有的设置(选择“注册表”*“导出注册表文件”,指定文件名称及保存的位置,“导出范围”项目中必须选中“选择的分支”,然后单击“保存”)。在右边窗口中选取“NullFile”或“FileName”,按下 Delete键,然后按Enter键。如果您希望将此项目恢复到功能表中,请找到您导出的.reg文件,双击将其恢复到注册表中。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值