`

vue中集成pdfjs自定义分页

    博客分类:
  • vue
 
阅读更多
<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>
0
0
分享到:
评论

相关推荐

    vue手写一个自定义操作的工作流

    在Vue.js框架中,手写一个自定义操作的工作流是一项挑战性的任务,但它能让你更好地理解和控制工作流的每一个细节。下面将详细讲解这个过程涉及的关键知识点。 首先,我们需要了解`Vue`的基础知识。Vue.js是一款轻...

    基于vue编写的一些自定义bpmn.js案例-基础篇.zip

    基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些自定义bpmn.js案例-基础篇.zip基于vue编写的一些...

    【vue+leaflet】自定义控件(五)

    【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】自定义控件(五), cv开箱即可使用 【vue+leaflet】...

    VUE打印demo,自动分页

    总结来说,这个“VUE打印demo,自动分页”项目涵盖了Vue.js组件化开发、Vue插件集成、CSS打印样式和自动分页逻辑等多个知识点。通过这个项目,开发者可以学习到如何在Vue环境中优雅地实现打印功能,提高用户体验。

    自己做的自定义分页控件

    在IT行业中,自定义分页控件是一种常见的需求,特别是在Web开发中,为了提供良好的用户体验,需要对大量的数据进行分页展示。本项目名为“自己做的自定义分页控件”,作者通过自己的实践解决了在使用现有分页控件时...

    vue 集合pdfJs

    在 Vue 应用中集成 PDF.js,首先需要确保你的项目环境中已经安装了 Vue CLI 或其他构建工具。接着,你需要引入 PDF.js。可以通过 npm 或 yarn 安装: ```bash npm install pdfjs-dist --save # 或者 yarn add pdfjs...

    vuetestloader从Vue组件中提取自定义测试块

    vue-test-loader 从Vue组件中提取自定义测试块

    自定义分页标签自定义分页标签

    在IT行业中,分页是一种常见的数据展示方式,特别是在大数据量的网页或应用中,它能够帮助用户有效地浏览和管理信息。自定义分页标签是指开发者根据项目需求,为应用程序创建的特定分页组件,以便更好地控制和美化...

    JavaScript自定义分页样式.docx

    JavaScript自定义分页样式是网页开发中常见的需求,特别是在数据量较大时,为了提供良好的用户体验,需要将数据分页展示。本示例中,我们通过JavaScript实现了一个简单的自定义分页功能,它允许用户根据需求调整每页...

    Swiper自定义分页器使用详解

    Swiper自定义分页器使用详解 Swiper是一款功能强大且流行的滑块插件,它提供了丰富的配置选项和api,能够满足各种滑块需求。Swiper的自定义分页器是其一个重要的配置项,它能够让开发者自定义分页器的样式和行为。...

    自己写的一个自定义分页

    在IT行业中,分页是一种常见的数据展示方式,特别是在网页或应用程序中处理大量数据时。它有助于提高用户体验,避免一次性加载过多数据导致页面响应慢或内存消耗过大。自定义分页则是根据具体需求进行设计和实现的...

    vue中的自定义分页插件组件的示例

    本文将详细介绍如何在Vue项目中创建一个自定义分页组件。 首先,让我们分析一下提供的代码片段。这个分页组件主要由以下几个部分组成: 1. **HTML结构**: 在`template`中,组件包含一个`.page-bar`类的`div`,...

    vue 轮播图 带自动分页 _vue常用的轮播组件

    本篇将详细讲解如何在 Vue 中创建一个带有自动分页功能的轮播图。 一、Vue 轮播图组件基础 在 Vue 中,我们可以创建自定义组件来实现轮播图。首先,我们需要一个包含多个图片或内容的数组,每个元素代表一张轮播图...

    vue Carousel 实现分页.vue

    Ant Design of Vue Carousel 走马灯 实现简单的分页效果demo 内容简单

    vue自定义右键菜单 -vue2版

    vue自定义右键菜单 -vue2版 vue自定义右键菜单 js右键菜单

    VUE2.0集成 Markdown 编辑器

    本篇文章将详细探讨如何在Vue 2.0项目中集成Markdown编辑器,以便为用户提供一个便捷的文本编辑体验。 Markdown是一种轻量级的标记语言,它允许我们使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML。...

    vue3+antv x6+tsx 制作自定义流程图

    在本文中,我们将深入探讨如何使用Vue3、AntV X6和TSX技术栈来创建一个自定义的流程图。这个项目旨在利用这些强大的工具,提供一个可扩展且用户友好的流程图编辑环境。 首先,Vue3是Vue.js框架的最新版本,它引入了...

    【Vue2 + ElementUI】分页el-pagination 封装成公用组件

    在Vue2框架中,ElementUI是一个非常流行的UI组件库,提供了丰富的组件,如表格、按钮、弹窗等,其中el-pagination是用于实现分页功能的组件。为了在多个页面上复用并统一分页样式,我们可以将其封装为一个公用组件。...

Global site tag (gtag.js) - Google Analytics