目的:像elementUI那樣注冊全局組件 預(yù)覽pdf文件
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站設(shè)計、周至網(wǎng)絡(luò)推廣、小程序開發(fā)、周至網(wǎng)絡(luò)營銷、周至企業(yè)策劃、周至品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供周至建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
技術(shù)支持:使用火狐的pdf.js http://mozilla.github.io/pdf.js/
準備:新建一個CPdf.vue文件,把火狐demo里面的build里面的pdf.js下載來,并且依賴了elementUI開發(fā)的其實就是用了
編寫:
template
上一頁 下一頁 Page: /關(guān)閉
js
import PDFJS from '../../../static/pdf/pdf.js' import { mapActions, mapGetters } from 'vuex'; export default { name: 'c-pdf', props: ['pdfurl'], data() { return { pdfDoc: null, //pdfjs 生成的對象 pageNum: 1,// pageRendering: false, pageNumPending: null, scale: 1.2,//放大倍數(shù) page_num: 0,//當前頁數(shù) page_count: 0,//總頁數(shù) maxscale: 2,//最大放大倍數(shù) minscale: 0.8//最小放大倍數(shù) } }, methods: { renderPage(num) { //渲染pdf let vm = this this.pageRendering = true; let canvas = document.getElementById('the-canvas') // Using promise to fetch the page this.pdfDoc.getPage(num).then(function(page) { var viewport = page.getViewport(vm.scale); //alert(vm.canvas.height) canvas.height = viewport.height; canvas.width = viewport.width; // Render PDF page into canvas context var renderContext = { canvasContext: vm.ctx, viewport: viewport }; var renderTask = page.render(renderContext); // Wait for rendering to finish renderTask.promise.then(function() { vm.pageRendering = false; if(vm.pageNumPending !== null) { // New page rendering is pending vm.renderPage(vm.pageNumPending); vm.pageNumPending = null; } }); }); vm.page_num = vm.pageNum; }, addscale() {//放大 if(this.scale >= this.maxscale) { return } this.scale += 0.1; this.queueRenderPage(this.pageNum) }, minus() {//縮小 if(this.scale <= this.minscale) { return } this.scale -= 0.1; this.queueRenderPage(this.pageNum) }, prev() {//上一頁 let vm = this if(vm.pageNum <= 1) { return; } vm.pageNum--; vm.queueRenderPage(vm.pageNum); }, next() {//下一頁 let vm = this if(vm.pageNum >= vm.page_count) { return; } vm.pageNum++; vm.queueRenderPage(vm.pageNum); }, closepdf() {//關(guān)閉PDF this.$emit('closepdf') }, queueRenderPage(num) { if(this.pageRendering) { this.pageNumPending = num; } else { this.renderPage(num); } } }, computed: { ctx() { let id = document.getElementById('the-canvas') return id.getContext('2d'); } }, mounted() { let vm = this PDFJS.getDocument(vm.pdfurl).then(function(pdfDoc_) { //初始化pdf vm.pdfDoc = pdfDoc_; vm.page_count = vm.pdfDoc.numPages vm.renderPage(vm.pageNum); }); } }
style less
.cpdf { position: fixed; top: 0; left: 0; background-color: rgba(0, 0, 0, .5); width: 100%; height: 100%; z-index: 99999; display: flex; justify-content: center; align-items: center; .center { text-align: center; height: 100%; overflow: auto; padding-top: 20px; .contor { margin-bottom: 10px; } } }
注冊到全局:在main.js 引入CPdf.vue
Vue.component(CPdf.name, CPdf)
使用:在想預(yù)覽pdf文件的組件里面
data() { return { isshowpdf:false, testpdfurl:'//cdn.mozilla.net/pdfjs/tracemonkey.pdf' } }, methods: { closepdf(){ this.isshowpdf=false }, }
效果:
npm :有人關(guān)注 那么我就發(fā)到 npm 上。 地址 https://www.npmjs.com/package/vueshowpdf
本文已被整理到了《Vue.js前端組件學習教程》,歡迎大家學習閱讀。
關(guān)于vue.js組件的教程,請大家點擊專題vue.js組件學習教程進行學習。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。