话不多说先展示效果


开篇说明:

pdfjs指的是:http://mozilla.github.io/pdf.js/
或者https://github.com/mozilla/pdf.js

注:该实现的底层为canvas渲染,本人亲自体验,渲染较大的pdf等待时间会比较长,用手机查看效果可能会出现渲染不全的情况

正文

本教程使用的pdfjs版本是"pdfjs-dist": “^2.3.200”,
如果读者安装教程走一遍发现报错,可以把版本改成和作者一致,再install

本文参考的是 pdfjs官网npm版本的使用示例,结合vue写的
官网npm版本地址https://github.com/mozilla/pdf.js/blob/master/examples/node/getinfo.js

第一步 安装
项目目录下
npm install pdfjs-dist --save

第二步 获得PDF地址
大概逻辑:先声明一些变量,然后获得PDF线上地址,最后调用下一步的初始化函数.
函数get_pdfurl()默认加载的是PDFjs给的在线PDF文档例子地址,外网比较慢,要等五分钟左右,可以注释掉,直接加载自己项目的pdf地址

<div class="pdf_down" ><div class="pdf_set_left"  @click="scaleD()">放大</div><div class="pdf_set_middle" @click="scaleX()">缩小</div>
</div><div :style="{width:pdf_div_width,margin:'0 auto'}" ><canvas v-for="page in pdf_pages" :id="'the-canvas'+page" :key="page"></canvas>
</div>
data(){return{pdf_scale:1.0,//pdf放大系数pdf_pages:[],pdf_div_width:'',pdf_src:null,}   },
get_pdfurl(){  //获得pdf//例子:加载pdf线上示例this.pdf_src = 'https://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf'this._loadFile(this.pdf_src)return//线上请求this.$axios.get('').then((res)=>{this.pdf_src = res.urlthis._loadFile(this.pdf_src)})}

第三步:初始化

let PDFJS = require('pdfjs-dist');
_loadFile (url) {  //初始化pdflet loadingTask = PDFJS.getDocument(url)loadingTask.promise.then((pdf) => {this.pdfDoc = pdfthis.pdf_pages = this.pdfDoc.numPagesthis.$nextTick(() => {this._renderPage(1)})})},

1.先引入pdfjs,作者和官网例子保持一致用的require没有用import.
2.引入之后 2.3版本返回的是个promise,不是以前的回调函数
3.该promise成功的话会返回一个pdfjs的实例, this.pdfDoc = pdf把该实例保存下,后面有用
4.滚动翻页也要知道总页数,所以 this.pdf_pages = this.pdfDoc.numPages 保持总页数
5.因为pdfjs其实是把PDF文件渲染成canvas,所以vue加载完dom后,要用nexttick调用渲染pdf函数

第四步,渲染

_renderPage (num) {  //渲染pdf页const that = thisthis.pdfDoc.getPage(num).then((page) => {let canvas = document.getElementById('the-canvas' + num)let ctx = canvas.getContext('2d')let dpr = window.devicePixelRatio || 1let bsr = ctx.webkitBackingStorePixelRatio ||ctx.mozBackingStorePixelRatio ||ctx.msBackingStorePixelRatio ||ctx.oBackingStorePixelRatio ||ctx.backingStorePixelRatio || 1let ratio = dpr / bsrlet viewport = page.getViewport({ scale: this.pdf_scale })canvas.width = viewport.width * ratiocanvas.height = viewport.height * ratiocanvas.style.width = viewport.width + 'px'that.pdf_div_width = viewport.width + 'px'canvas.style.height = viewport.height + 'px'ctx.setTransform(ratio, 0, 0, ratio, 0, 0)let renderContext = {canvasContext: ctx,viewport: viewport}page.render(renderContext)if (this.pdf_pages > num) {this._renderPage(num + 1)}})},

这段代码大概意思是:通过id锚点把pdf渲染成canvas,
1.let viewport = page.getViewport({ scale: this.pdf_scale })
sacle后面跟的是pdf的缩放比例.默认1.0
大于1.0表示放大,比如1.1
小于1.0表示缩小,比如0.9
所以pdf的放大缩小就是通过改变scale绑定的变量值的大小后再重新调用渲染pdf的函数来实现
2.that.pdf_div_width = viewport.width + ‘px’
这句话是拿到pdf文件的宽度,不同的PDF文件在1.0的缩放下宽度是不确定的,如果想让渲染的PDF居中,需要canvas元素外面嵌套层div,该div的宽度就是pdf_div_width

总结

读者直接把博客中的代码复制到自己的项目中,修改下获取PDF地址函数就可以直接用了,
完整的dome在这 https://gitee.com/huazi-zhanye/pdf-js_-deme

vue + pdf.js实现浏览器查看pdf文件相关推荐

  1. Asp.net Core 配合 PDFObject 和 pdf.js 在浏览器显示pdf文件

    Asp.net Core 配合 PDFObject 和 pdf.js 在浏览器直接显示pdf文件 测试环境的浏览器版本: Chrome :90.0.4430.93(64 位) FireFox :88. ...

  2. fis3+vue+pdf.js制作预览PDF文件或其他

    人生第一篇博客,的确有点紧张,但有些许兴奋,因为这对于我来说应该是一个好的开始,以此励志在技术的道路上越走越远. 看过了多多少少的技术博客,给自己带来了很多技术上的收获,也因此在想什么时候自己也可以赠 ...

  3. android 在线解析pdf文件格式,Android PDF预览阅读:用Mozilla PDF.js浏览本地在线PDF文件 | KaelLi的博客...

    在之前的Android端预览PDF方案一文中,曾经提到了使用Mozilla的PDF.js来加载PDF的办法,今天就详细的说一下具体的实现. 简介 PDF.js是一个使用HTML5构建的PDF查看器.由 ...

  4. JS实现浏览器打印PDF(使用HttpPrinter打印插件)

    JS实现浏览器打印PDF(使用HttpPrinter打印插件) 第一步:启动HttpPrinter打印插件 第二步:用浏览器打开示例文件\调用示例\websocket协议示例\html\打印pdf.h ...

  5. RAD PDF于Web浏览器的PDF阅读器

    RAD PDF 基于Web浏览器的PDF阅读器 作为功​​能最完备的基于HTML的PDF查看器,编辑器和ASP.NET的表单填充器,提供了灵活而强大的替代常规PDF解决方案.与Adobe Acroba ...

  6. vue版pdf.js 在线预览pdf文件流

    1.简介 由于我使用的是若依版的vue前端框架(ElementUI二开),因此不知道为什么在前端配置pdf.js一直无法生效,所以换了一个思路,将pdf.js相关文件放置在后台代码中,以访问后台页面的 ...

  7. springboot+vue整合pdf.js实现预览pdf

    前景回顾: 上一次说到使用浏览器自带的预览pdf功能所遗留的问题,360浏览器不够给力,IE的我没测,估计也不行,于是乎我又翻阅资料(度娘)找到了一种新的实现方式,使用pdf.js实现 如果想看使用浏 ...

  8. PDF.js实现在线展示pdf文件

    背景 现在很多项目开发过程中都会碰到PDF在线预览的需求,对于PC端浏览器,一般直接提供PDF文件,iframe一下就可以直接预览.但在移动端要预览PDF则较为麻烦,有些浏览器检测到文件流,就会直接下 ...

  9. uniapp 使用pdf.js 加载本地pdf文件报错问题

    最近有在做一个移动端的应用,应用里涉及到大量的js游戏开发,使用Android原生做不太合适,就选择了uniapp,其中有一个功能是读取本地的pdf文件并展示.在网上查了点资料都是用pdf.js来开发 ...

  10. html 加载pdf文件内容不显示不出来,pdf.js首次加载pdf文件时找不到pdf文件,刷新后才能出现pdf文件...

    前台点击文件学码的定一近,更工广款近,更工广款近,更名后,后台通过openoffice将doc文件转为pdf格式文件,然后存放在服务器tomcat'中,pdf.js首次加载服务器中tomcat中的转化 ...

最新文章

  1. 关于学习Python的一点学习总结(40->os.path模块)
  2. 20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串...
  3. jQuery: 判断指针是否在某元素内 How do I check if the mouse is over an element
  4. linux: chmod,chown命令详解
  5. linux网络配置命令 ifconfig 、route 、ip 、ip route
  6. 搭建Android的jenkins持续集成环境
  7. visio 科学图形包_如何科学地做笔记
  8. 弹性地基梁计算程序 注册机_详解抗滑桩类型、设计及计算方法
  9. java 删除列 csv,Java- CSV / Delete column in csv file
  10. 2015年下半年的读书技术
  11. 山东新动能软件创新·创业大赛 首场宣讲答疑会顺利举行
  12. 核心银行系统 之一 历史与发展
  13. 漫谈可视化Prefuse(五)---一款属于我自己的可视化工具
  14. ASP.NETf发送邮件
  15. 【Day2.1】时差为看日出创造了条件
  16. python3 + opencv +pyzbar实时检测二维码 / 定位二维码,并绘制出二维码的框和提取二维码内容
  17. 一文读懂 Redis!
  18. Facebook营销策略大全,脸书营销技巧详细教程
  19. 如何配置域名的 CNAME
  20. php面试题中笔试题目的汇总,php面试题中笔试题目的汇总

热门文章

  1. mac 用 VMware Fusion 安装 ubuntu
  2. Python使用random模块实现掷骰子游戏
  3. 康佳电视系统升级服务器地址,【当贝市场】康佳智能电视本地升级教程
  4. 巧用Redis做游戏跨服排行榜
  5. 09 Python 利用爱心曲线函数打印自定义内容为爱心形状
  6. 正项级数收敛性的判别法
  7. 机器学习必须要会的:方差、标准差、相对标准偏差、正态分布的概念
  8. 周杰伦新歌刷爆朋友圈的背后 付费音乐的春天终于来了?
  9. Unity | 实现粘贴、复制功能
  10. fme坐标转换器_FME坐标点提取