欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端在線預(yù)覽PDF文件三種實現(xiàn)方式(兼容移動端)

 更新時間:2025年02月27日 10:45:56   作者:南風(fēng)同學(xué)  
這篇文章主要介紹了前端在線預(yù)覽PDF文件三種實現(xiàn)方式的相關(guān)資料,分別是使用微軟在線預(yù)覽地址、直接使用window.open打開文檔鏈接以及使用PDF.js,PDF.js方法穩(wěn)定,適用于大多數(shù)文件,每種方法都給出了詳細的代碼示例,需要的朋友可以參考下

背景

項目中需要在線預(yù)覽公司內(nèi)部的PDF文件,且PC端和移動端均可支持查看

實現(xiàn)方式

一、微軟提供的在線預(yù)覽地址結(jié)合iframe:

reviewUrl 為需要預(yù)覽的 pdf 文件鏈接
這個方式不僅可以預(yù)覽 pdf,同時也可以預(yù)覽 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>

缺點:

  • 有一定的概率會出現(xiàn)網(wǎng)絡(luò)問題導(dǎo)致無法預(yù)覽,需要多次刷新重新打開的問題,體驗較差
  • 在安卓真機設(shè)備上會出現(xiàn)打開時直接下載 pdf 文件不能在線預(yù)覽的問題,不符合需求

二、直接 window.open 打開文檔鏈接

在 iOS 上表現(xiàn)為可以直接在網(wǎng)頁中打開,但在安卓端也會變成直接下載文檔

三、通過 PDF.js 實現(xiàn)

PDF.js 官網(wǎng)

注意:建議下載低版本,我的是 v2.7.570。版本太高會發(fā)現(xiàn) pdf.js 會報一個版本不匹配的錯誤,不知道是不是我們的pdf文件版本太低的兼容性問題。
我從v4一直試到v3,最后在這個版本才是最穩(wěn)定的,測試了一下98%以上的文件都能預(yù)覽

1、首先在官網(wǎng)下載好所需要的文件,主要內(nèi)容如下:

將 build 和 web 兩個文件夾,整個放到項目中的 public 文件夾下(我的是 Nuxt3 項目,但如果是 Vite 創(chuàng)建的 vue3 項目同樣也是放在 public 文件夾下)

2、新建 Preview.vue 組件,用來預(yù)覽 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用于預(yù)覽的url,固定格式,會去項目中的 public 文件夾下找到 web 文件夾中的 viewer.html
const pdfjsFileUrl = '/web/viewer.html?file=';
const previewUrl = ref("");

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

watch(
  () => props.reviewUrl,
  newReviewUrl => {
    // 如果你預(yù)覽的是本地的 pdf,那么建議你把 pdf 文件也放到 public 中,這樣不會被編譯 
    previewUrl.value = `${pdfjsFileUrl}${encodeURIComponent(newReviewUrl)}`;
  },
  {
    immediate: true,
  }
);
</script>
// 彈框的樣式我就不貼了

3、在 public/web 下找到 viewer.js 文件,搜索 file origin does not match viewer's,把這一行注釋掉,不然會存在跨域問題

4、在移動端設(shè)備上,會發(fā)現(xiàn)預(yù)覽時 pdf 整體內(nèi)容縮放過小,影響閱讀,雖然可以通過手動進行放大,但是這里是可以進行初始設(shè)置的。在 viewer.js 文件中,搜索 const DEFAULT_SCALE_VALUE,然后把默認的值修改為 'page-width',這樣在移動端預(yù)覽的時候,就會是最合適設(shè)備大小寬度的樣式

這個方法中,有一個 switch 代碼塊,可以設(shè)置的值如下:

你可以自己設(shè)定初始值,以實現(xiàn)你想要的初始化效果。

注意:pdfjs的版本號要對應(yīng),不然會有如下報錯:

Warning: UnknownErrorException: The API version "3.11.174" does not match the Worker version "3.6.172".

查看版本號,可以通過console.log("pdf-js版本", pdfjs.version)來打印

總結(jié)

到此這篇關(guān)于前端在線預(yù)覽PDF文件三種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)前端在線預(yù)覽PDF文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js控制li的隱藏和顯示實例代碼

    js控制li的隱藏和顯示實例代碼

    下面小編就為大家?guī)硪黄猨s控制li的隱藏和顯示實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • JS導(dǎo)出PDF插件的方法(支持中文、圖片使用路徑)

    JS導(dǎo)出PDF插件的方法(支持中文、圖片使用路徑)

    下面小編就為大家?guī)硪黄狫S導(dǎo)出PDF插件的方法(支持中文、圖片使用路徑)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JavaScript解析JSON格式數(shù)據(jù)的方法示例

    JavaScript解析JSON格式數(shù)據(jù)的方法示例

    這篇文章主要介紹了JavaScript解析JSON格式數(shù)據(jù)的方法,結(jié)合實例形式分析了JavaScript解析json格式數(shù)據(jù)的常用函數(shù)與使用技巧,需要的朋友可以參考下
    2017-01-01
  • JavaScript實現(xiàn)的選擇排序算法實例分析

    JavaScript實現(xiàn)的選擇排序算法實例分析

    這篇文章主要介紹了JavaScript實現(xiàn)的選擇排序算法,結(jié)合實例形式分析了選擇排序的原理、實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • JS獲取字符對應(yīng)的ASCII碼實例

    JS獲取字符對應(yīng)的ASCII碼實例

    下面小編就為大家?guī)硪黄狫S獲取字符對應(yīng)的ASCII碼實例。小編覺得挺不錯的,現(xiàn)在就想給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • js 獲取圖像縮放后的實際寬高,位置等信息

    js 獲取圖像縮放后的實際寬高,位置等信息

    本文主要介紹了js獲取圖像縮放后的實際寬高,位置等信息的方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • JS實現(xiàn)自適應(yīng)高度表單文本框的方法

    JS實現(xiàn)自適應(yīng)高度表單文本框的方法

    這篇文章主要介紹了JS實現(xiàn)自適應(yīng)高度表單文本框的方法,實例分析了針對IE內(nèi)核與非IE內(nèi)核下的javascript控制文本框樣式的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • JavaScript實現(xiàn)無刷新上傳預(yù)覽圖片功能

    JavaScript實現(xiàn)無刷新上傳預(yù)覽圖片功能

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)無刷新上傳預(yù)覽圖片功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • JavaScript避免嵌套代碼淺析

    JavaScript避免嵌套代碼淺析

    這篇文章主要介紹了JavaScript避免嵌套代碼,很多時候需要編寫的邏輯本身就很惡心, 乍看之下, 堆頁巖般的判定嵌套里似乎每一層都是必要的, 也只能說盡量讓它看起來不那么惡心
    2023-02-02
  • JavaScript 中的 Map使用指南

    JavaScript 中的 Map使用指南

    本文詳細介紹了JavaScript中的Map數(shù)據(jù)結(jié)構(gòu),包括它的創(chuàng)建、常用方法、迭代方式以及與對象的區(qū)別,文章簡要介紹了WeakMap的概念和使用場景,感興趣的朋友一起看看吧
    2025-02-02

最新評論