当前位置:首页 > 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实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 297…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { return…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue环境实现

vue环境实现

Vue 环境搭建 安装 Node.js 和 npm Node.js 是运行 Vue 的基础环境,npm 是包管理工具。从 Node.js 官网 下载并安装最新稳定版本。安装完成后,在终端运行以下命令验…

vue实现网站

vue实现网站

Vue 实现网站的基本步骤 Vue.js 是一个渐进式 JavaScript 框架,适合构建现代化的单页应用(SPA)或动态网站。以下是使用 Vue 实现网站的基本方法。 初始化 Vue 项目 使用…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…