vue 如何预览pdf文件?



1. 使用 vue-pdf 插件

1.0 效果图

在这里插入图片描述

1.1 插件安装

yarn add vue-pdf

1.2 代码展示

html:

<template>
  <div>
    <pdf ref="pdf" v-for="i in numPages" :key="i" :page="i" :src="laoclUrl">></pdf>
  </div>
</template>
<script>
import pdf from "vue-pdf";

export default {
  name: "Home",
  components: { pdf },
  data() {
    return {
      numPages: 1, // pdf文件页数
      laoclUrl: "" // 预览路径
    };
  },
  mounted() {
    this.previewPdf();
  },
  methods: {
    // 简历预览
    previewPdf() {
      // pdf地址
      let fileUrl = "http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf";

      // 计算总页数
      let loadingTask = pdf.createLoadingTask(fileUrl);
      loadingTask.promise
        .then(pdf => {
          this.numPages = pdf.numPages;
        })
        .catch(err => {
          console.error("pdf 加载失败", err);
        });

      this.laoclUrl = fileUrl;
    }
  }
};
</script>


2. 使用 PDF .js 插件

2.0 效果图

在这里插入图片描述

2.1 插件安装

yarn add pdfjs

2.2 简单封装组件

<template>
  <div>
    <iframe height="100%" width="100%" :src="`${getFilePath}`"></iframe>
  </div>
</template>
<script>
export default {
  name: "PDFJSViewer",
  props: {
    fileName: String,
    path: String
  },
  computed: {
    getFilePath: function() {
      if (this.fileName !== "") {
        return this.path + "?file=" + this.fileName;
      }
      return this.path;
    }
  }
};
</script>

2.3 使用组件

<template>
  <div class="index_container full">
    <PDFJSViewer :path="`${laoclUrl}`" :fileName="'pdf preview'" />
  </div>
</template>
<script>
import PDFJSViewer from "/src/components/pdfViewer/pdfViewer";
export default {
  name: "Home",
  components: { PDFJSViewer },
  data() {
    return {
      // 预览路径
      laoclUrl: ""
    };
  },
  mounted() {
    this.previewPdf();
  },
  methods: {
    // 简历预览
    previewPdf() {
      this.laoclUrl = "http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf";
    }
  }
};
</script>

3. 兼容word格式文件预览(.doc 、.docx)

发现在预览word文件时,会先弹窗一个下载弹窗,同时也会正常展示word文件。

但是对于一些需求来说,是不希望多出来一个弹窗的。该如何解决呢?

    this.laoclUrl = "https://view.officeapps.live.com/op/view.aspx?src=你的word地址(必须是http/https的)";

参考地址: https://blog.youkuaiyun.com/qq_41312395/article/details/109450562

HTML 中的 `<a>` 标签可以直接用于预览 PDF 文件,其方式是将 PDF 文件的 URL 地址作为 `href` 属性值,并通过 `target="_blank"` 在新窗口中打开。这种做法在大多数现代浏览器中是支持的,浏览器会调用内置的 PDF 查看器来显示文件内容。例如: ```html <a href="https://example.com/sample.pdf" target="_blank">预览 PDF 文件</a> ``` 使用 `<a>` 标签可以有效避免浏览器对弹出窗口的拦截问题,因为该标签的行为是用户主动触发的导航操作,通常不会被视为广告或恶意行为。此外,该方法实现简单,适用于大多数 Web 应用场景[^1]。 然而,对于某些移动设备或特定浏览器环境(如微信内置浏览器),PDF 文件可能无法直接预览,因为这些环境可能限制了浏览器的 PDF 渲染能力。在这种情况下,即使使用 `<a>` 标签,也可能只能触发文件下载,而无法实现在线预览功能[^2]。 为了增强兼容性,可以在 `<a>` 标签的基础上结合其他技术手段,例如通过 `<iframe>` 或 `<embed>` 标签实现更灵活的 PDF 预览控制。例如,结合 `<iframe>` 的方式如下: ```html <iframe src="https://example.com/sample.pdf" width="100%" height="600px"></iframe> ``` 这种方式可以在 HTML 页面中嵌入 PDF 文件,并在支持的浏览器中直接显示内容。对于需要更高兼容性的场景,可以结合第三方库(如 PDF.js)实现更稳定的 PDF 渲染效果。 需要注意的是,如果 PDF 文件体积较大,直接通过 `<a>` 标签或 `<iframe>` 加载可能会导致页面加载缓慢,甚至浏览器卡顿。因此,在实际应用中应考虑文件大小限制,并提供相应的加载提示或分页加载机制以优化用户体验。 ### 相关问题 1. 如何在 Vue 项目中集成 PDF.js 来渲染大文件 PDF? 2. 如何配置服务器以支持大文件 PDF 的范围请求? 3. 使用 PDF.js 渲染大文件 PDF 时有哪些性能优化技巧? 4. 如何在 React 项目中实现大文件 PDF 的流式加载? 5. 如何通过前端代码检测 PDF 文件的大小并在必要时提示用户?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值