`

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
分享到:
评论

相关推荐

    pdf.js和pdf.worker.js

    在实际应用中,PDF.js可以轻松集成到各种Web项目中,如CMS系统、在线文档阅读平台等。开发者可以通过配置选项来调整其行为,如设置默认的缩放比例、启用或禁用GPU加速等。此外,PDF.js还提供了丰富的API,可以用来...

    力软新版APP上线,采用js语言,基于Vue.js和uni-app框架.pdf

    后台WebAPI由C#语言开发,集成在力软框架的后端源代码中。 APP2.0的亮点功能包括: 1. **小程序支持**:用户可以绑定力软账号与微信、钉钉、支付宝的小程序账号,实现一键登录。 2. **工作流分享**:工作流程可以...

    pdfjs资源包

    同时,根据项目需求,可能需要对PDF.js进行定制化开发,例如调整默认样式、增加自定义控件,或者与其他前端框架(如React、Vue、Angular等)进行集成。 总之,PDF.js资源包为前端开发者提供了一种强大的工具,使得...

    pdfjs解决前端需要预览打印下载pdf的一款插件

    它支持多种浏览器,包括Chrome、Firefox、Safari、Edge等,并且可以无缝集成到Vue.js等现代JavaScript框架中。 在前端开发中,处理PDF文件通常是个挑战,因为浏览器的原生支持有限。PDF.js通过提供一套完整的API和...

    pdfjs插件,支持uniapp 查看pdf文件

    在本案例中,我们讨论的是将PDF.js集成到uniapp中的方法,uniapp是一个跨平台的移动应用开发框架,基于Vue.js,用于构建iOS、Android、H5等平台的应用。 首先,为了在uniapp项目中使用PDF.js,你需要将`pdfjs25`...

    pdf.js 手机端或H5显示pdf

    8. **Vue.js 集成**:如果你的项目是基于 Vue.js 构建的,你可以利用 Vue 插件或者自定义 Vue 组件来整合 PDF.js,从而在 Vue 应用中轻松实现 PDF 查看功能。 总的来说,PDF.js 提供了一套完整的解决方案,让开发者...

    pdf.js前端插件,用于在线预览pdf文件

    - **自定义集成**:PDF.js可以轻松地与现有的Web应用程序集成,提供灵活的API和配置选项。 2. **使用步骤**: - **引入库**:首先,需要在HTML文件中引入PDF.js的库文件,通常包括`pdf.js`和`pdf.worker.js`。 -...

    最新在线预览pdf格式文件插件

    PDF(Portable Document Format)是一种广泛使用的文件格式,用于在各种操作系统和硬件平台之间共享文档,保持原始...在实际应用中,还可以结合其他前端框架和库,如React、Vue或Angular,进行更复杂的集成和功能扩展。

    pdf在线预览js

    - **PDFViewer组件**:PDFViewer通常是一个自定义的React组件或者Vue组件,它负责集成PDF.js库并处理与用户交互相关的逻辑,如翻页、缩放、打印等。 3. **打印功能实现** - **PDF.js支持打印**:PDF.js库提供了...

Global site tag (gtag.js) - Google Analytics