一、在本地浏览pdf(直接将element-dialog 和 iframe相结合)需要将要浏览的pdf放入static文件夹下面

  <el-button type="text" @click="dialogVisible = true">点击打开 Dialog</el-button>
<el-dialog
title="提示"
:visible.sync="dialogVisible">
<iframe src="../../static/文件名.pdf" width="90%" height="600px"></iframe>
</el-dialog>

在data中直接定义 dialogVisible

  data() {
return {
dialogVisible: false
}
}

以上方法便可直接在本地查看pdf,无需添加pdf.js

二、通过后台传来的数据,展示pdf

在展示之前,要先接收到后台的axios的数据

1.  api.js中定义

export const decision = data => ajaxHttp('/home/dynamic/decision/page', data, 'POST')

2.要接受的页面引入

import { decision } from '../api/api'

3.开始接收后台

    async getList () {
this.loading = true
let params = {
type: 1
}
const res = await decision(params)
if (res.data.code === 1) {
this.list = res.data.data
console.log(this.list)
} else {
this.$message({type: 'success', message: res.data.msg})
}
this.listNumber = this.list.length
this.loading = false
},

接收后不要忘记在mounted里面定义如何开始

mounted () {
this.getList()
}

4.定义一下显示出来的和点击事件的位置

  <div v-for="item in list" :key="item.id" @click="clickPDFfn(item.filePath1)">{{item.title}}</div>

5.定义el-dialog (定义之前要先引入,查看element.api)

<el-dialog
:visible.sync="otherDialogVisible"
width="80%"
center>
<span>
<canvas id="canvas1"></canvas>
<div class="foot" v-if='pdfDoc'>
<el-button class='left' v-if="pageNum>1" @click="onPrevPage">上一页</el-button>
<el-button class='right' v-if="pageNum<pdfDoc.numPages" @click="onNextPage">下一页</el-button>
</div>
</span>
</el-dialog>

6.写下如下方法

handleCurrentChange (val) {
this.currentPage = val
},
clickPDFfn (item) {
this.loading = true
this.otherDialogVisible = true
this.showPDF('http://compre-tj-api.gov.bbdtek.com/repository/readPDF?path=' + item)
},
showPDF (url) {
let _this = this
this.$pdf.getDocument(url).then(function (pdf) {
_this.pdfDoc = pdf
_this.$nextTick(() => {
_this.renderPage(1)
})
})
},
renderPage (num) {
this.pageRendering = true
let _this = this
this.pdfDoc.getPage(num).then(function (page) {
let canvas = document.getElementById('canvas1')
let ctx = canvas.getContext('2d')
let dpr = window.devicePixelRatio || 1
let bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio ||
ctx.msBackingStorePixelRatio ||
ctx.oBackingStorePixelRatio ||
ctx.backingStorePixelRatio || 1
let ratio = dpr / bsr
let viewport = page.getViewport(screen.availWidth / page.getViewport(1).width)
canvas.height = viewport.height * ratio
canvas.width = viewport.width * ratio
canvas.style.width = '100%'
canvas.style.height = '100%'
ctx.setTransform(ratio, 0, 0, ratio, 0, 0)
// Render PDF page into canvas context
var renderContext = {
canvasContext: canvas.getContext('2d'),
viewport: viewport
}
var renderTask = page.render(renderContext) // Wait for rendering to finish
renderTask.promise.then(function () {
_this.pageRendering = false
if (_this.pageNumPending !== null) {
// New page rendering is pending
this.renderPage(_this.pageNumPending)
_this.pageNumPending = null
}
})
})
},
queueRenderPage (num) {
console.log(num)
if (this.pageRendering) {
this.pageNumPending = num
} else {
this.renderPage(num)
}
},
onPrevPage () {
if (this.pageNum <= 1) {
return
}
this.pageNum--
this.queueRenderPage(this.pageNum)
},
onNextPage () {
if (this.pageNum >= this.pdfDoc.numPages) {
return
}
this.pageNum++
this.queueRenderPage(this.pageNum)
}

7.添加以下属性

data () {
return {
listNumber: 0,
loading: false,
otherDialogVisible: false,
pdfDoc: null,
pageNum: 1,
pageNumPending: null,
currentPage: 1,
list: []
}
}

通过以上方法即可连接后台直接浏览pdf

注: 后台pdf地址定义为 filePath1

蒙层嵌套pdf以及连接后台的更多相关文章

  1. MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!

    回到目录 递归递归我爱你!只要你想做,就一定能成功! 从一到二,从二到三,它是容易的,也是没什么可搞的,或者说,它是一种流水线的方式,而从三到十,从十到百,它注定要有一个质的突破,否则,它会把你累死, ...

  2. 设置 tableview 的背景颜色,总是有蒙层

    1.给tableview添加了背景图片后, cell 总是有一层蒙层蒙着,很阴暗. 2.实验以后才发现背景图片被放在了 cell 的后面.

  3. css-dialog样式实现弹框蒙层全屏无需JS计算高度兼容IE7

    <!DOCTYPE html><html><head>  <meta charset="UTF-8">  <title> ...

  4. css 蒙层

    蒙层 利用z-index: .mui-backdrop-other { position: fixed; top: 44px; right:; bottom:; left:; z-index:; ba ...

  5. iOS开发之实现半透明蒙层背景效果[用于下拉菜单页和分享页]

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助.欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  6. appium-在页面点击一下处理(一般处理提示蒙层)

    在写用例的时候,经常会发现某些第一次进去的页面会有一个蒙层提示.我们只有处理掉这个蒙层,才能继续我们的用例: 这边我们使用的是TouchAction的tap方法 TouchAction action ...

  7. vue 连接后台

    在 index.js 中可以配置后台的地址:代理的方式: 这个文件在 config 中 proxyTable: { // 连接后台 '/api':{ target:"http://new.w ...

  8. 用Loading 加载中的整页加载来做蒙层

    总结:遇见的bug 如何写一个蒙层 最初我打算的是自己写一个蒙层,但是写出来后, 不能够将整个屏幕全部覆盖.只能够覆盖 除[顶部导航] 和[左侧菜单栏] 于是我就使用了element-ui中的 [Lo ...

  9. vue 鼠标移入移出 列表蒙层展示

    <template> <section class="base"> <ul> <li v-for="(item, index) ...

随机推荐

  1. graph easy绘制ascii简易流程图

    graph-easy 日常我们经常需要画一些简易流程图,但是如果使用visio等工具来作图,一则略显大材小用,二则图片导出后再要粘贴.相比下,如果可以简单的用一些text的图来表达,则会简单的多.比如 ...

  2. mfc动态控件生成

    1.变量.函数声明 std::vector<CButton*>pBtn; afx void OnBtnClik(UINT uID);//回调函数 2.分配空间 pBtn.resize(50 ...

  3. 【HNOI 2017】大佬

    Problem Description 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语.你作为一个 OIer, ...

  4. linux中centros6.7安装php5.6,httpd-2.2.19(web产品化)遇到的问题总结

    前段时间在公司实习,web系统产品化的过程踩了很多坑,在这边总结一下,由于对linux不是很懂,全是自己一步步一个一个问题解决的 1,查看系统中是否安装apache,php,mysql环境 Apach ...

  5. js原型和原型链理解到面向对象

    一.js中的两种对象,普通对象和函数对象 var obj1 = {}; var obj2 =new Object(); var obj3 = new obj1(); function fun1(){} ...

  6. 爬虫学习笔记(1)-- 利用Python从网页抓取数据

    最近想从一个网站上下载资源,懒得一个个的点击下载了,想写一个爬虫把程序全部下载下来,在这里做一个简单的记录 Python的基础语法在这里就不多做叙述了,黑马程序员上有一个基础的视频教学,可以跟着学习一 ...

  7. 注入(injector)

    在java开发中有时候我们的一个类需要依赖另外一个类,这种就是依赖关系,创建对象的工作一般由spring容器来完成然后注入给调用者,这种就是依赖注入. Java依赖注入设计原则允许我们移除硬编码依赖和 ...

  8. 雷林鹏分享:解决CI框架的Disallowed Key Characters错误提示

    用CI框架时,有时候会遇到这么一个问题,打开网页,只显示 Disallowed Key Characters 错误提示.有人说 url 里有非法字符.但是确定 url 是纯英文的,问题还是出来了.但清 ...

  9. 关于spark写入文件至文件系统并制定文件名之自定义outputFormat

    引言: spark项目中通常我们需要将我们处理之后数据保存到文件中,比如将处理之后的RDD保存到hdfs上指定的目录中,亦或是保存在本地 spark保存文件: 1.rdd.saveAsTextFile ...

  10. SmartGit 常见错误提示代码

    1.Failed to connect to newgit.op.ksyun.com port 80: Timed out. Could not update branch states (green ...