vue中集成pdfjs实现分页在线预览

该博客展示了使用pdfjs-dist和jQuery实现PDF在线阅读的代码。通过初始化pdfjs,根据页码获取PDF内容并渲染到画布上,同时监听滚动事件,当滚动到底部时加载新的页面内容,实现了PDF的连续阅读功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>

<div id="div_read_area_scrool" class="no-scrollbar--x" :style="'text-align:center;height:'+ '500px;'+'overflow: auto;'">

<div id="div_read_area"></div>

</div>

</template>

 

<script>

// 属性:

// author:lx 2018-08-06

import pdfjsLib from 'pdfjs-dist'

import $ from 'jquery'

export default {

name: 'ReadByPdf',

data () {

return {

theReadOnline: {

current: 1,

numPages: 0,

}

}

},

methods: {

// 初始化pdfjs

initThePDFJSLIB: function () {

pdfjsLib.GlobalWorkerOptions.workerSrc = 'pdfjs-dist/build/pdf.worker.js'

},

// 根据页码获取pdf内容

loadPDFForTheDocument (index) {

// 实例化pdfjs

pdfjsLib.getDocument("/static/110.pdf").then(pdf => {

// 通过页码获取每页内容

pdf.getPage(index).then(page => {

// 获得总页数

this.theReadOnline.numPages = pdf.numPages

 

// 设置页面显示倍数 842×595

let _clientWidth = document.documentElement.clientWidth * 0.618

let view = _clientWidth % 842 > 0 ? 1.33 : 1

 

// 实例化画布

let canvas = document.createElement('canvas')

let context = canvas.getContext('2d')

 

let dpr = window.devicePixelRatio || 1

let bsr = context.webkitBackingStorePixelRatio ||

context.mozBackingStorePixelRatio ||

context.msBackingStorePixelRatio ||

context.oBackingStorePixelRatio ||

context.backingStorePixelRatio || 1

let ratio = dpr / bsr

 

let viewport = page.getViewport(view)

 

canvas.width = viewport.width * ratio

canvas.height = viewport.height * ratio

// canvas.style.width = viewport.width + 'px'

// canvas.style.height = viewport.height + 'px'

 

// context.setTransform(ratio, 0, 0, ratio, 0, 0)

 

let renderContext = {

canvasContext: context,

viewport: viewport

}

 

// 追加上新的一页空间

document.getElementById('div_read_area').appendChild(canvas)

 

// 赋值上显示内容

page.render(renderContext).then(() => {

})

})

}).catch(err => {

console.log(err)

})

},

watchTheReadScroll: function () {

let _theVue = this

 

// 获取节点

let _scrollContent = document.getElementById('div_read_area_scrool')

 

// 绑定事件

_scrollContent.addEventListener('scroll', function () {

var viewH, contentH, scrollTop

 

viewH = $(this).height()

contentH = $(this).get(0).scrollHeight

scrollTop = $(this).scrollTop()

 

// 后期改成传递给父级

if (scrollTop / (contentH - viewH) >= 1) { // 到达底部时,加载新内容

_theVue.theReadOnline.current++

if (_theVue.theReadOnline.current <= _theVue.theReadOnline.numPages) {

_theVue.loadPDFForTheDocument(_theVue.theReadOnline.current)

}

}

})

}

},

mounted: function () {

this.initThePDFJSLIB()

this.watchTheReadScroll()

this.loadPDFForTheDocument(1)

}

}

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值