蒙層巢狀pdf以及連線後臺
阿新 • • 發佈:2018-12-14
一、在本地瀏覽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