以下是一个基于Vue.js和pdf.js的PDF预览程序:

<template>
  <div>
    <canvas ref="canvas"></canvas>
  </div>
</template>

<script>
import pdfjsLib from 'pdfjs-dist'

export default {
  name: 'PDFPreview',
  props: {
    url: {
      type: String,
      required: true
    }
  },
  data() {
    return {
      pdfDoc: null,
      pageNum: 1,
      pageRendering: false,
      pageNumPending: null,
      scale: 1.5
    }
  },
  mounted() {
    this.renderPage()
  },
  methods: {
    async renderPage() {
      if (!this.pdfDoc) {
        this.pdfDoc = await pdfjsLib.getDocument(this.url).promise
      }

      const canvas = this.$refs.canvas
      const ctx = canvas.getContext('2d')

      const page = await this.pdfDoc.getPage(this.pageNum)
      const viewport = page.getViewport({ scale: this.scale })

      canvas.height = viewport.height
      canvas.width = viewport.width

      const renderContext = {
        canvasContext: ctx,
        viewport: viewport
      }

      this.pageRendering = true
      const renderTask = page.render(renderContext)

      renderTask.promise.then(() => {
        this.pageRendering = false
        if (this.pageNumPending !== null) {
          this.pageNum = this.pageNumPending
          this.pageNumPending = null
          this.renderPage()
        }
      })
    },
    queueRenderPage(num) {
      if (this.pageRendering) {
        this.pageNumPending = num
      } else {
        this.pageNum = num
        this.renderPage()
      }
    },
    onPrevPage() {
      if (this.pageNum <= 1) {
        return
      }
      this.pageNum--
      this.queueRenderPage(this.pageNum)
    },
    onNextPage() {
      if (this.pageNum >= this.pdfDoc.numPages) {
        return
      }
      this.pageNum++
      this.queueRenderPage(this.pageNum)
    }
  }
}
</script>

<style scoped>
canvas {
  display: block;
  margin: auto;
}
</style>

使用方法:

<template>
  <div>
    <PDFPreview url="path/to/pdf/file.pdf"></PDFPreview>
  </div>
</template>

<script>
import PDFPreview from './PDFPreview.vue'

export default {
  name: 'App',
  components: {
    PDFPreview
  }
}
</script>

其中,PDFPreview组件接收一个url属性,表示要预览的PDF文件的路径。组件会自动渲染第一页,并提供上一页和下一页的功能。

注意:pdf.js需要通过npm安装并引入,否则无法运行。

我需要一段vue程序可以预览PDF

原文地址: https://www.cveoy.top/t/topic/bJUi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录