首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

前端在线预览PDF文件(兼容移动端)

  • 25-02-19 13:40
  • 3365
  • 7683
blog.csdn.net

背景

项目中需要在线预览公司内部的PDF文件,且PC端和移动端均可支持查看

实现方式

一、微软提供的在线预览地址结合iframe:

reviewUrl 为需要预览的 pdf 文件链接
这个方式不仅可以预览 pdf,同时也可以预览 word、ppt、excel 等文件

<iframe :src="'https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(reviewUrl)" frameborder="0" title="review" width="100%" height="100%">iframe>
  • 1

缺点:

  • 有一定的概率会出现网络问题导致无法预览,需要多次刷新重新打开的问题,体验较差
  • 在安卓真机设备上会出现打开时直接下载 pdf 文件不能在线预览的问题,不符合需求

二、直接 window.open 打开文档链接

在 iOS 上表现为可以直接在网页中打开,但在安卓端也会变成直接下载文档

三、通过 PDF.js 实现

PDF.js 官网

注意:建议下载低版本,我的是 v2.7.570。版本太高会发现 pdf.js 会报一个版本不匹配的错误,不知道是不是我们的pdf文件版本太低的兼容性问题。
我从v4一直试到v3,最后在这个版本才是最稳定的,测试了一下98%以上的文件都能预览

1、首先在官网下载好所需要的文件,主要内容如下:
官网中展示的内容
将 build 和 web 两个文件夹,整个放到项目中的 public 文件夹下(我的是 Nuxt3 项目,但如果是 Vite 创建的 vue3 项目同样也是放在 public 文件夹下)

2、新建 Preview.vue 组件,用来预览 pdf 文件
因为我的需求是打开弹框进行查看,如果你的项目中不是,那么你打开新页面就行,记得把链接带上。代码如下:

<template>
  <el-dialog
    title=""
    class="preview-dialog"
   	v-model="dialogVisible"
    :destroy-on-close="true"
    :append-to-body="true"
    :show-close="false"
    @closed="handleClose"
  >
    <div class="close-button" @click.stop="handleClose"></div>
    <iframe frameborder="0" :src="previewUrl" width="100%" height="100%"></iframe>
  </el-dialog>
</template>

<script lang="ts" setup>
import { ref, watch } from "vue";
interface IProps {
  reviewUrl?: string;
}

const props = withDefaults(defineProps<IProps>(), {
  reviewUrl: "",
});
const emit = defineEmits(["update:modelValue", "emitClosePreview"]);

const dialogVisible = ref(true);
// pdfjs用于预览的url,固定格式,会去项目中的 public 文件夹下找到 web 文件夹中的 viewer.html
const pdfjsFileUrl = '/web/viewer.html?file=';
const previewUrl = ref("");

const handleClose = () => {
  emit("emitClosePreview");
};

watch(
  () => props.reviewUrl,
  newReviewUrl => {
    // 如果你预览的是本地的 pdf,那么建议你把 pdf 文件也放到 public 中,这样不会被编译 
    previewUrl.value = `${pdfjsFileUrl}${encodeURIComponent(newReviewUrl)}`;
  },
  {
    immediate: true,
  }
);
</script>
// 弹框的样式我就不贴了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

3、在 public/web 下找到 viewer.js 文件,搜索 file origin does not match viewer's,把这一行注释掉,不然会存在跨域问题
在这里插入图片描述

4、在移动端设备上,会发现预览时 pdf 整体内容缩放过小,影响阅读,虽然可以通过手动进行放大,但是这里是可以进行初始设置的。在 viewer.js 文件中,搜索 const DEFAULT_SCALE_VALUE,然后把默认的值修改为 'page-width',这样在移动端预览的时候,就会是最合适设备大小宽度的样式在这里插入图片描述这个方法中,有一个 switch 代码块,可以设置的值如下:在这里插入图片描述
你可以自己设定初始值,以实现你想要的初始化效果。

注:本文转载自blog.csdn.net的南风同学的文章"https://blog.csdn.net/sinat_37170738/article/details/145107548"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

104
前端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top