当前位置:首页 > VUE

vue实现pdf预览

2026-03-08 07:17:55VUE

Vue 中实现 PDF 预览的方法

使用 pdf.js

pdf.js 是 Mozilla 开发的一个开源库,可以直接在浏览器中渲染 PDF 文件。适合需要高度自定义的场景。

安装依赖:

npm install pdfjs-dist

在 Vue 组件中使用:

vue实现pdf预览

<template>
  <div>
    <canvas v-for="page in pages" :key="page" :ref="'canvas' + page"></canvas>
  </div>
</template>

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

export default {
  data() {
    return {
      pages: [],
    };
  },
  mounted() {
    this.loadPDF('your-file.pdf');
  },
  methods: {
    async loadPDF(url) {
      const loadingTask = pdfjsLib.getDocument(url);
      const pdf = await loadingTask.promise;

      this.pages = Array.from({ length: pdf.numPages }, (_, i) => i + 1);

      this.$nextTick(() => {
        this.pages.forEach(async (pageNum) => {
          const page = await pdf.getPage(pageNum);
          const viewport = page.getViewport({ scale: 1.0 });
          const canvas = this.$refs['canvas' + pageNum][0];
          const context = canvas.getContext('2d');

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

          const renderContext = {
            canvasContext: context,
            viewport: viewport,
          };
          await page.render(renderContext).promise;
        });
      });
    },
  },
};
</script>

使用 vue-pdf 插件

vue-pdf 是一个封装了 pdf.js 的 Vue 专用插件,简化了集成步骤。

安装依赖:

vue实现pdf预览

npm install vue-pdf

在 Vue 组件中使用:

<template>
  <div>
    <pdf :src="pdfSrc" v-for="i in numPages" :key="i" :page="i"></pdf>
  </div>
</template>

<script>
import pdf from 'vue-pdf';

export default {
  components: { pdf },
  data() {
    return {
      pdfSrc: 'your-file.pdf',
      numPages: 0,
    };
  },
  created() {
    const loadingTask = pdf.createLoadingTask(this.pdfSrc);
    loadingTask.promise.then(pdf => {
      this.numPages = pdf.numPages;
    });
  },
};
</script>

使用 iframe 嵌入

适用于简单的预览需求,无需额外依赖。

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

<script>
export default {
  data() {
    return {
      pdfUrl: 'your-file.pdf',
    };
  },
};
</script>

使用第三方服务(如 Google Docs Viewer)

适用于公开的 PDF 文件,通过 URL 直接嵌入。

<template>
  <iframe
    :src="'https://docs.google.com/viewer?url=' + encodeURIComponent(pdfUrl) + '&embedded=true'"
    width="100%"
    height="600px"
    frameborder="0"
  ></iframe>
</template>

<script>
export default {
  data() {
    return {
      pdfUrl: 'your-file.pdf',
    };
  },
};
</script>

注意事项

  • 跨域问题:如果 PDF 文件位于其他域名下,需确保服务器允许跨域访问。
  • 性能优化:大文件可分页加载或使用缩略图预览。
  • 移动端适配:针对移动设备调整缩放比例或使用响应式布局。

以上方法可根据项目需求灵活选择,pdf.js 适合深度定制,vue-pdf 简化集成,iframe 适合快速实现。

标签: vuepdf
分享给朋友:

相关文章

vue实现递归

vue实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据(如菜单、评论列表、文件目录等)。以下是具体实现方法: 定义递归组件 通过 name 选项让组件可以递归调用自身:…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue实现抖动

vue实现抖动

Vue 实现抖动效果 在 Vue 中实现抖动效果可以通过 CSS 动画或 JavaScript 动画库来实现。以下是几种常见的方法: 使用 CSS 动画 通过定义 @keyframes 动画并在 V…

vue实现烟花

vue实现烟花

Vue 实现烟花效果 在 Vue 中实现烟花效果可以通过结合 CSS 动画和 JavaScript 动态生成烟花元素。以下是具体实现方法: 动态生成烟花元素 通过 Vue 的 v-for 动态生成烟…

vue 实现原理

vue 实现原理

Vue 实现原理 Vue.js 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是 Vue 实现原理的核心要点: 响应式系统 Vu…

自己实现vue

自己实现vue

实现简易版 Vue.js 核心功能 要实现一个简易版 Vue.js,需要理解其核心功能:数据响应式、模板编译、依赖收集和虚拟 DOM。以下分模块实现关键功能。 数据响应式(Reactivity) 通…