<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>
// 参数:the-document={}
// 属性:
import pdfjsLib from 'pdfjs-dist'
import $ from 'jquery'
export default {
name: 'ReadByPdf',
data () {
return {
theReadOnline: {
current: 1,
numPages: 0,
html: ''
}
}
},
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>

vue中集成pdfjs自定义分页的更多相关文章

  1. VUE中集成echarts时 getAttribute of null错误

    错误 错误场景一: 错误提示: 在运行Vue项目时出现了上述错误,出现该错误的原因是Echarts的图形容器还未生成就对其进行了初始化所造成的,代码如下: // 基于准备好的dom,初始化echart ...

  2. vue中如何在自定义组件上使用v-model和.sync

    自定义事件 tips 推荐始终使用 kebab-case 的事件名.(v-on会将事件名自动转换为小写,避免匹配不到) changeData × change-data √ 自定义组件的v-model ...

  3. 在vue中使用weixin-js-sdk自定义微信分享效果

    在做微信分享的时候,产品要求分享效果要有文字和图片,使用weixin-js-sdk解决了, 原始的分享效果: 使用微信JS-SDK的分享效果: 首先需要引入weixin-js-sdk npm inst ...

  4. vue中使用element-ui自定义主题后,vue-cli跑不起来了

    环境:vue-cli 2.x版本 自己在官网配置了主题并放到了项目中https://element.eleme.cn/#/zh-CN/theme 然后,我的脚手架在我的电脑中休息了几天,就跑不通了呢! ...

  5. vue中checkbox 样式自定义重写;循环遍历checkbox,拿到不同的v-model绑定值;及获取当前checked 状态,全选和全不选等功能。

    开始写这个功能,不得不吐槽原始的checkbox,灰色小方块的丑陋,虽说eleUI,mintUI,等各种框架的单复选框已经对其优化,但还是不想要这种.那我们就来研究一下怎么处理它. <secti ...

  6. 基于Metronic的Bootstrap开发框架经验总结(18)-- 在代码生成工具Database2Sharp中集成对Bootstrap-table插件的分页及排序支持

    在我们开发系统界面,包括Web和Winform的都一样,主要的界面就是列表展示主界面,编辑查看界面,以及一些辅助性的如导入界面,选择界面等,其中列表展示主界面是综合性的数据展示界面,一般往往需要对记录 ...

  7. Ionic2中集成腾讯Bugly之自定义插件

    Ionic2混合开发,入坑系列:Ionic2中集成腾讯Bugly之自定义插件 1.编写Bugly.js代码 var exec = require('cordova/exec'); module.exp ...

  8. Vue中结合Flask与Node.JS的异步加载功能实现文章的分页效果

    你好!欢迎阅读我的博文,你可以跳转到我的个人博客网站,会有更好的排版效果和功能. 此外,本篇博文为本人Pushy原创,如需转载请注明出处:http://blog.pushy.site/posts/15 ...

  9. vue中自定义组件(插件)

    vue中自定义组件(插件) 原创 2017年01月04日 22:46:43 标签: 插件 在vue项目中,可以自定义组件像vue-resource一样使用Vue.use()方法来使用,具体实现方法: ...

随机推荐

  1. 云笔记项目-Spring事务学习-传播NOT_SUPPORTED

    接下来测试事务传播属性设置为NOT_SUPPORTED Service层 Service层主要设置如下,其中还插入了REQUIRED作为比较. package Service; import java ...

  2. NBU显示备份成功,但实际是无备份成功

    从3月18日开始到4月3日是备份失败的 GROUPSIZE 7 OPERATION BACKUPDATABASE "DBADB" SQLHOST "yicatong&qu ...

  3. C#使用Spire.Doc Word for .Net读写Word

    以前对Excel或Word文档操作都使用微软的COM组件Microsoft Word 15.0 object library. 但是这种方式必须要求服务器上安装Office,而且会出现读写操作完成后未 ...

  4. 音视频处理概要 markdown

    最近要想办法把录制的音视频进行拼接. 比方说此次录制的视频有三段,通过高清直播编码器录制,录制下的标准为h.264 直接用ffmpeg简单拼接,音频会丢失,所以有了此次解决方案(有可能会繁琐,简单方案 ...

  5. C#读取OPC server

    1.安装opc server https://blog.csdn.net/yhtppp/article/details/80676118 2.c#读取opc https://github.com/le ...

  6. myhabits where in foreach

    myhabits传入参数:类,其中类中包含字符串数组String[] 当查询where in String[]时 <select id="selectData" parame ...

  7. linux下进程绑定cpu情况查看的几种方法

    1.pidstat命令 查看进程使用cpu情况,如果绑定了多个cpu会都显示出来 pidstat -p `pidof 进程名` -t 1 2.top命令 (1)top (2)按f键可以选择下面配置选项 ...

  8. ABAP开发规范

    一.数据库操作 1.禁止修改系统标准表. 2.如果使用到FOR ALL ENTRIES IN语句取数,一定要校验关联内表非空性. 3.禁止一条SELECT关联的表超过5张,需要多表取值的时候建议分开取 ...

  9. 使用 python 操作 mongodb 常用的操作

    pymongo 的安装命令 pip install pymongo. import pymongo 数据库及集合查询(创建) 连接数据库 查询数据库中的数据库 查询数据库中的集合 创建数据库和集合只需 ...

  10. Python模拟接口登录

    参考地址:https://blog.csdn.net/rifengxxc/article/details/77414090 下面讲下关于python模拟登录实验,之前怎么调试也不行,我也是摸索了好久, ...