• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

vue2.0全局组件之pdf详解

vue 搞代码 4年前 (2022-01-08) 24次浏览 已收录 0个评论

这篇文章主要为大家详细绍了vue2.0全局组件之pdf的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

目的:像elementUI那样注册全局组件 预览pdf文件

技术支持:使用火狐的pdf.js http://mozilla.github.io/pdf.js/

准备:新建一个CPdf.vue文件,把火狐demo里面的build里面的pdf.js下载来,并且依赖了elementUI开发的其实就是用了

编写:

template

  <div class="cpdf"> <div class="center"> <div class="contor"> 上一页下一页     <span>Page: <span></span> / <span></span></span>     关闭</div></div></div>

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,//放大倍数 page_num: 0,//当前页数 page_count: 0,//总页数 maxscale: 2,//最大放大倍数 minscale: 0.8//最小放大倍数 } }, 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.pageNumPen<strong>本文来源gaodai#ma#com搞@@代~&码*网2</strong>ding = 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 = vm.page_count) { return; } vm.pageNum++; vm.queueRenderPage(vm.pageNum); }, closepdf() {//关闭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) 

使用:在想预览pdf文件的组件里面

 
 data() { return { isshowpdf:false, testpdfurl:'//cdn.mozilla.net/pdfjs/tracemonkey.pdf' } }, methods: { closepdf(){ this.isshowpdf=false }, } 

 

npm :有人关注 那么我就发到 npm 上。 地址 https://www.npmjs.com/package/vueshowpdf

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持gaodaima搞代码网

以上就是vue2.0全局组件之pdf详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:vue2.0全局组件之pdf详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址