当前位置:首页 > VUE

vue实现pdf预览

2026-01-08 16:52:40VUE

使用 vue-pdf 库实现 PDF 预览

安装 vue-pdf 库:

npm install vue-pdf

在 Vue 组件中引入并使用:

<template>
  <div>
    <pdf :src="pdfUrl" style="width: 100%; height: 800px;"></pdf>
  </div>
</template>

<script>
import pdf from 'vue-pdf'

export default {
  components: {
    pdf
  },
  data() {
    return {
      pdfUrl: '/path/to/your/file.pdf' // 可以是本地路径或远程URL
    }
  }
}
</script>

使用 PDF.js 实现更灵活的预览

安装 pdfjs-dist:

vue实现pdf预览

npm install pdfjs-dist

实现基础预览功能:

<template>
  <div>
    <canvas ref="pdfCanvas"></canvas>
    <div>
      <button @click="prevPage">上一页</button>
      <span>第 {{ pageNum }} 页 / 共 {{ pageCount }} 页</span>
      <button @click="nextPage">下一页</button>
    </div>
  </div>
</template>

<script>
import * as pdfjsLib from 'pdfjs-dist'

export default {
  data() {
    return {
      pdfDoc: null,
      pageNum: 1,
      pageCount: 0,
      scale: 1.5
    }
  },
  mounted() {
    this.loadPDF('/path/to/your/file.pdf')
  },
  methods: {
    async loadPDF(url) {
      const loadingTask = pdfjsLib.getDocument(url)
      this.pdfDoc = await loadingTask.promise
      this.pageCount = this.pdfDoc.numPages
      this.renderPage(this.pageNum)
    },
    async renderPage(num) {
      const page = await this.pdfDoc.getPage(num)
      const viewport = page.getViewport({ scale: this.scale })
      const canvas = this.$refs.pdfCanvas
      const context = canvas.getContext('2d')

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

      const renderContext = {
        canvasContext: context,
        viewport: viewport
      }
      await page.render(renderContext).promise
    },
    prevPage() {
      if (this.pageNum <= 1) return
      this.pageNum--
      this.renderPage(this.pageNum)
    },
    nextPage() {
      if (this.pageNum >= this.pageCount) return
      this.pageNum++
      this.renderPage(this.pageNum)
    }
  }
}
</script>

使用 iframe 实现简单预览

对于简单的需求,可以直接使用 iframe:

vue实现pdf预览

<template>
  <iframe 
    :src="pdfUrl"
    style="width: 100%; height: 800px;"
    frameborder="0"
  ></iframe>
</template>

<script>
export default {
  data() {
    return {
      pdfUrl: '/path/to/your/file.pdf'
    }
  }
}
</script>

注意事项

PDF.js 需要设置跨域头才能加载远程 PDF 文件,如果遇到跨域问题,需要在服务器端设置:

Access-Control-Allow-Origin: *

对于大文件 PDF,建议实现分页加载以提高性能。vue-pdf 也支持多页渲染,可以通过 v-for 循环渲染多个 pdf 组件。

PDF 文件路径可以是相对路径、绝对路径或完整的 URL 地址。对于本地开发,建议将 PDF 文件放在 public 目录下。

标签: vuepdf
分享给朋友:

相关文章

vue实现div

vue实现div

Vue 实现 DIV 元素的方法 在 Vue 中实现 DIV 元素可以通过多种方式,以下是几种常见的实现方法: 使用模板语法 在 Vue 的模板中直接使用 HTML 的 <div> 标签…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

实现vue datepicker

实现vue datepicker

安装依赖 使用 vue-datepicker 或第三方库如 v-calendar 或 vue2-datepicker。以 vue2-datepicker 为例: npm install vue2…

vue 实现单点登录

vue 实现单点登录

单点登录(SSO)实现原理 单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。 Vue中实现SSO的方案 基于…

vue实现精准查询

vue实现精准查询

实现精准查询的方法 在Vue中实现精准查询通常需要结合输入框、数据处理和筛选逻辑。以下是几种常见的方法: 使用计算属性进行筛选 计算属性适合对数据进行实时筛选,响应输入框的变化: <tem…

vue实现输入地址

vue实现输入地址

Vue 实现输入地址功能 在 Vue 中实现输入地址功能,可以通过结合表单输入、地图 API(如高德、百度或 Google Maps)以及地址自动补全等方式完成。以下是几种常见方法: 使用高德地图…