前端vue项目(使用pdf.js) pdf展示及pdf工具栏放大缩小功能实现

前端vue项目(使用pdf.js) pdf展示及pdf工具栏放大缩小功能实现

1.vue项目pdf展示
2.pdf工具栏放大缩小功能

前言

文章参考:
pdf.js使用1
pdf.js使用2

前端vue项目(使用pdf.js) pdf展示及pdf工具栏放大缩小功能实现
先看下效果图:
在这里插入图片描述

一、pdf.js展示pdf

1.文件准备

pdfjs-dist
需要放在根目录下的static文件夹中(具体文件查看我的资源中pdfjs-dist)

2.引入

import PDFJS from '../../../../../static/pdfjs-dist/build/pdf.js'

3.在页面某个位置使用canvas画布来渲染pdf文件

<div class="pdf-box" @scroll="mScroll" ref="agreemenContent">
    <canvas v-for="page in pages" :id="'the-canvas' + page" :key="page" ref="pdf"></canvas>
 </div>

4.主要渲染方法

methods:{
    _renderPage (num) {
            this.pdfDoc.getPage(num).then((page) => {
                let canvas = document.getElementById('the-canvas' + num)
                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.width = viewport.width * ratio
                canvas.height = viewport.height * ratio
                // canvas.style.width = viewport.width + 'px'
                canvas.style.width = 6 + 'rem'  //设置宽度
                // 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.pages > num) {
                    this._renderPage(num + 1)
                }
            })
        },
        _loadFile (url) {
            PDFJS.getDocument(url).then((pdf) => {
                this.pdfDoc = pdf
                this.pages = this.pdfDoc.numPages
                this.$nextTick(() => {
                    this._renderPage(1)
                })
            })
        },
}

5.调用函数传入pdf文件地址进行渲染

this._loadFile(pdfurl)

6.pdf.js展示形式下监听滚动到底

主要方法@scroll=“mScroll”

<div class="pdf-box" @scroll="mScroll" ref="agreemenContent">
    <canvas v-for="page in pages" :id="'the-canvas' + page" :key="page" ref="pdf"></canvas>
 </div>

7.pdf.js可定制化的弊端就是工具功能需要自己写

(1)pdf放大

// pdf放大
    scaleD() {
      this.scaleCount++
      this.$refs.pdf.forEach(item => {
        let widthTemp = item.style.width.split('px')[0]
        let heightTemp = item.style.height.split('px')[0]
        item.style.width = parseInt(widthTemp) * parseFloat(this.scale) + 'px'
        item.style.height = parseInt(heightTemp) * parseFloat(this.scale) + 'px'
        // let widthTemp = item.style.width.split('rem')[0]
        // let heightTemp = item.style.height.split('rem')[0]
        // item.style.width = parseInt(widthTemp) * parseFloat(this.scale) + 'rem'
        // item.style.height = parseInt(heightTemp) * parseFloat(this.scale) + 'rem'
      })
    },

(2)缩小

// pdf缩小
    scaleX() {
      if (this.scaleCount == 0) {
        return
      }
      this.$refs.pdf.forEach(item => {
        let widthTemp = item.style.width.split('px')[0]
        let heightTemp = item.style.height.split('px')[0]
        item.style.width = parseInt(widthTemp) / parseFloat(this.scale) + 'px'
        item.style.height = parseInt(heightTemp) / parseFloat(this.scale) + 'px'
        // let widthTemp = item.style.width.split('rem')[0]
        // let heightTemp = item.style.height.split('rem')[0]
        // item.style.width = parseInt(widthTemp) / parseFloat(this.scale) + 'rem'
        // item.style.height = parseInt(heightTemp) / parseFloat(this.scale) + 'rem'
      })
      this.scaleCount--
    },

二、iframe展示pdf

1.标签拿来

<div>
    <iframe src="./research.html" name="iframetest" class="iframetest" id="iframetest" width="100%" height="200" frameborder="0" scrolling="no"></iframe>
</div>

2.路径拿来

src="./research.html"

3.样式拿来

class="iframetest" id="iframetest" width="100%" height="200" frameborder="0" scrolling="no"

4.监听滚动

var frameWidow = document.getElementById('iframe').contentWindow;

$(frameWidow).scroll(function(){undefined
      console.log("scroll");
 });

注意:iframe监听滚动有兼容问题,如果有监听滚动需求建议直接使用pdf.js;
若无滚动监听需要建议直接使用iframe,简单方便快捷

总结

两种形式展示pdf,亲测有效哦

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,我们可以使用pdf.js插件来实现Vue2项目PDF预览功能,并且可以实现上一页和下一页的功能。具体步骤如下: 1.首先,我们需要在Vue2项目中安装pdf.js插件。可以使用npm命令进行安装: ```shell npm install pdfjs-dist ``` 2.在Vue2项目中创建一个PDFViewer.vue组件,并在该组件中引入pdf.js插件: ```javascript import pdfjsLib from 'pdfjs-dist' ``` 3.在该组件中,我们需要定义一个pdf对象来存储PDF文件的相关信息: ```javascript data() { return { pdf: null, currentPage: 1, totalPages: 0 } } ``` 4.接下来,我们需要编写一个方法来加载PDF文件并显示第一页: ```javascript loadPDF() { pdfjsLib.getDocument(this.pdfUrl).promise.then(pdf => { this.pdf = pdf this.totalPages = pdf.numPages this.renderPage(this.currentPage) }) }, renderPage(pageNumber) { this.pdf.getPage(pageNumber).then(page => { const canvas = this.$refs.canvas const context = canvas.getContext('2d') const viewport = page.getViewport(1.5) canvas.height = viewport.height canvas.width = viewport.width page.render({ canvasContext: context, viewport: viewport }) }) } ``` 5.在模板中,我们需要添加一个canvas元素来显示PDF文件的内容,并添加两个按钮来实现上一页和下一页的功能: ```html <template> <div> <canvas ref="canvas"></canvas> <div> <button @click="prevPage">上一页</button> <button @click="nextPage">下一页</button> </div> </div> </template> ``` 6.最后,我们需要编写两个方法来实现上一页和下一页的功能: ```javascript prevPage() { if (this.currentPage > 1) { this.currentPage-- this.renderPage(this.currentPage) } }, nextPage() { if (this.currentPage < this.totalPages) { this.currentPage++ this.renderPage(this.currentPage) } } ``` 至此,我们就可以在Vue2项目使用pdf.js插件来实现PDF预览并实现上一页和下一页的功能了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值