Vue 项目 PDF 预览插件指南

Vue 项目 PDF 预览插件指南

本文整合了 Vue 项目中常用的 PDF 预览插件,涵盖 Vue 2 和 Vue 3 的解决方案,并提供使用示例和选型建议。


主流插件及使用示例

1. vue-pdf

简介
  • 基于 pdf.js 封装的 Vue 2 插件,支持分页渲染和基础交互。
  • 兼容性:仅支持 Vue 2。
安装
bash 复制代码
npm install vue-pdf
使用示例
html 复制代码
<template>
  <pdf :src="pdfUrl" :page="currentPage" />
</template>

<script>
import pdf from 'vue-pdf';
export default {
  components: { pdf },
  data() {
    return { 
      pdfUrl: 'path/to/file.pdf',
      currentPage: 1 
    };
  }
};
</script>
特点
  • 支持动态加载 PDF 文件流。
  • 多页 PDF 需循环渲染组件。

2. vue-pdf-embed

简介
  • 专为 Vue 3 优化的 PDF 预览组件,支持翻页、缩放、下载等功能。
  • 兼容性:Vue 3 专用,支持 SSR。
安装
bash 复制代码
npm install vue-pdf-embed
使用示例
html 复制代码
<template>
  <VuePdfEmbed :source="pdfUrl" :page="1" />
</template>

<script setup>
import { VuePdfEmbed } from 'vue-pdf-embed';
const pdfUrl = "/example.pdf";
</script>
特点
  • 现代化 UI,支持文本层和工具栏定制。
  • 移动端适配友好,清晰度优化方案可参考官方文档

3. pdfvuer

简介
  • 适用于 Vue 2 的轻量级 PDF 查看器,支持缩略图和逐页加载。
  • 兼容性:Vue 2。
安装
bash 复制代码
npm install pdfvuer
使用示例
html 复制代码
<template>
  <pdf :src="pdfData" :page="currentPage" @num-pages="totalPages = $event" />
</template>

<script>
import pdf from 'pdfvuer';
export default {
  components: { pdf },
  data() {
    return { 
      pdfData: { url: "/example.pdf" },
      currentPage: 1,
      totalPages: 0
    };
  }
};
</script>
特点
  • 依赖 pdf.js,需注意版本匹配。
  • 适合大文件分页加载场景。

4. vue-office

简介
  • 一站式文件预览库,支持 PDF、Word、Excel 等多种格式。
  • 兼容性:Vue 2 和 Vue 3。
安装
bash 复制代码
npm install vue-office
使用示例
html 复制代码
<template>
  <VueOfficePdf :src="pdfUrl" />
</template>

<script>
import { VueOfficePdf } from 'vue-office';
export default {
  components: { VueOfficePdf },
  data() {
    return { pdfUrl: "/example.pdf" };
  }
};
</script>
特点
  • 多格式文件预览首选,适合复杂业务需求。

5. 直接集成 PDF.js

简介
  • 无需 Vue 插件,直接使用 pdfjs-dist 实现高度定制化渲染。
安装
bash 复制代码
npm install pdfjs-dist
使用示例
html 复制代码
<template>
  <canvas ref="pdfCanvas"></canvas>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import * as pdfjsLib from 'pdfjs-dist';

const pdfCanvas = ref(null);
onMounted(async () => {
  const pdf = await pdfjsLib.getDocument("/example.pdf").promise;
  const page = await pdf.getPage(1);
  const viewport = page.getViewport({ scale: 1.5 });
  const canvas = pdfCanvas.value;
  canvas.width = viewport.width;
  canvas.height = viewport.height;
  page.render({ canvasContext: canvas.getContext('2d'), viewport });
});
</script>
特点
  • 灵活性最高,适合需要深度定制的项目。

6. pdfobject

简介
  • 轻量级库,自动检测浏览器支持并嵌入 PDF。
安装
bash 复制代码
npm install pdfobject
使用示例
html 复制代码
<template>
  <div ref="pdfContainer"></div>
</template>

<script>
import PDFObject from 'pdfobject';
export default {
  mounted() {
    PDFObject.embed('/example.pdf', this.$refs.pdfContainer);
  }
};
</script>
特点
  • 提供回退下载链接,兼容性较好。

选型建议

场景 推荐方案
Vue 2 项目 vue-pdfpdfvuer
Vue 3 项目 vue-pdf-embedvue-office
多格式支持 vue-office
高度定制化 直接集成 PDF.js
快速基础预览 pdfobjectiframe

注意事项

  1. 跨域问题:外部 PDF 文件需配置 CORS 策略。
  2. 性能优化 :大文件建议分页加载(如 pdfvuer 的逐页渲染)。
  3. 移动端适配 :调整 canvas 分辨率以优化清晰度。
  4. 版本兼容性 :部分插件依赖特定版本的 pdf.js,需检查文档。

相关推荐
勘察加熊人5 分钟前
angular轮播图
前端·javascript·angular.js
勘察加熊人18 分钟前
angular新闻列表分页
前端·javascript·angular.js
勘察加熊人21 分钟前
angular贪吃蛇
前端·javascript·angular.js
Long_poem42 分钟前
【自学笔记】Vue基础知识点总览-持续更新
前端·vue.js·笔记
Bunury1 小时前
flex布局自定义一行几栏,靠左对齐===grid布局
前端·javascript·html
一只专注api接口开发的技术猿1 小时前
电商API接口设计:商品、订单与支付模块的微服务拆分实践
大数据·前端·数据库·微服务·云原生·架构
爱写代码的派大星1 小时前
css实现左右切换平滑效果
前端·css
大道归简1 小时前
Web网页开发——水果忍者
前端·javascript·html
OpenTiny社区1 小时前
TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力&开发分支调整
前端·低代码·开源·opentiny
大猫会长2 小时前
react中,在组件内返回style标签方法
前端·react.js·前端框架