最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3實(shí)現(xiàn)pdf在線預(yù)覽的三種方式

 更新時(shí)間:2025年02月14日 10:20:33   作者:Li_Ning21  
這篇文章主要為大家詳細(xì)介紹了使用Vue3實(shí)現(xiàn)pdf在線預(yù)覽的三種常用方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

今天一天對(duì)當(dāng)前可用的pdf預(yù)覽插件做了測(cè)試,主要需求是只能預(yù)覽不能下載,但對(duì)于前端來(lái)說(shuō),沒(méi)有絕對(duì)的禁止,這里只羅列實(shí)現(xiàn)方式。

目前采用vue3版本為:3.2.37

  • iframe
  • vue-office
  • pdfjs-dist

iframe

先說(shuō)最簡(jiǎn)單的,iframe可以直接展示pdf文件,所以如果不作禁止預(yù)覽等操作,iframe是最合適的。

    <el-dialog
      v-model="previewOtherUpload"
      reset-drag-position
      draggable
      sticky
      :title="_options.imgName || '詳情'"
      footer-hide
      class-name="vertical-center-modal"
    >
        <div
          @contextmenu.prevent
          style="user-select: none;"
        >
          <iframe
            ref="iframe"
            :src="`${modelValue}#toolbar=0`"
            width="100%"
            height="600px"
            @load="onIframeLoad"
          >
          </iframe>
        </div>
    </el-dialog>

<script setup>
const modelValue = ref('https://501351981.github.io/vue-office/examples/dist/static/test-files/test.pdf')
let previewOtherUpload = ref(false);
const iframe = ref(null)

const clickShow = () => {
	previewOtherUpload.value = true;
}

// 嘗試在iframe加載完畢后,進(jìn)行右鍵禁用,但實(shí)際需要通過(guò)postmessage來(lái)處理,所以這里無(wú)實(shí)際用處
const onIframeLoad = () => {
  try {
    console.log('iframe 已加載', iframe.value.contentWindow.window);
    if (iframe.value.contentWindow.document) {
      iframe.value.contentWindow.document.addEventListener('contextmenu', (e) => e.preventDefault());
    }
  } catch (error) {
    console.error('無(wú)法訪問(wèn) iframe 內(nèi)容:', error);
  }
}
</script>

vue-office

vue-office-gitcode地址

安裝

#docx文檔預(yù)覽組件
npm install @vue-office/docx vue-demi@0.14.6

#excel文檔預(yù)覽組件
npm install @vue-office/excel vue-demi@0.14.6

#pdf文檔預(yù)覽組件
npm install @vue-office/pdf vue-demi@0.14.6

#pptx文檔預(yù)覽組件
npm install @vue-office/pptx vue-demi@0.14.6

如果是vue2.6版本或以下還需要額外安裝 @vue/composition-api

npm install @vue/composition-api

我們?nèi)绻活A(yù)覽pdf,則安裝 npm install @vue-office/pdf vue-demi@0.14.6

    <el-dialog
      v-model="previewOtherUpload"
      reset-drag-position
      draggable
      sticky
      :title="_options.imgName || '詳情'"
      footer-hide
      class-name="vertical-center-modal"
    >
        <div
          @contextmenu.prevent
          style="user-select: none;"
        >
          <VueOfficePdf
            :src="modelValue"
          />
        </div>
    </el-dialog>

<script setup>
import VueOfficePdf from '@vue-office/pdf'
const modelValue = ref('https://501351981.github.io/vue-office/examples/dist/static/test-files/test.pdf')
let previewOtherUpload = ref(false);

const clickShow = () => {
	previewOtherUpload.value = true;
}
</script>

pdfjs-dist

這是目前最麻煩的一個(gè)插件,一定先確定下載的版本"pdfjs-dist": “2.16.105”,我用的是這個(gè),否則下面的workerSrc設(shè)置會(huì)有問(wèn)題。

  <el-dialog
      v-model="previewOtherUpload"
      reset-drag-position
      draggable
      sticky
      :title="_options.imgName || '詳情'"
      footer-hide
      class-name="vertical-center-modal"
    >
		<div 
          id="pdf-view"
          @contextmenu.prevent
          style="user-select: none;"
        >
            <canvas v-for="page in state.pdfPages" :key="page" id="pdfCanvas" />
            <div id="text-view"></div>
        </div>
    </el-dialog>

<script setup>
import { computed, reactive, ref, watch, nextTick } from "vue";
import * as pdfjsViewer from 'pdfjs-dist/web/pdf_viewer.js'
import 'pdfjs-dist/web/pdf_viewer.css'
import * as PDF from 'pdfjs-dist'
// 設(shè)置 pdf.worker.js 路徑
PDF.GlobalWorkerOptions.workerSrc = '../../../node_modules/pdfjs-dist/build/pdf.worker.js';
let pdfDoc = null;

const modelValue = ref('https://501351981.github.io/vue-office/examples/dist/static/test-files/test.pdf')
let previewOtherUpload = ref(false);

const clickShow = () => {
	loadFile(modelValue)
	previewOtherUpload.value = true;
}

const loadFile = (url) => {
    PDF.getDocument({
        url,
        cMapUrl: 'https://cdn.jsdelivr.net/npm/pdfjs-dist@2.16.105/cmaps/',
        cMapPacked: true,
    }).promise.then((pdf) => {
        pdfDoc = pdf
        // 獲取pdf文件總頁(yè)數(shù)
        state.pdfPages = pdf.numPages
        nextTick(() => {
            renderPage(1) // 從第一頁(yè)開始渲染
        })
    })
}
const renderPage = (num) => {
    pdfDoc.getPage(num).then((page) => {
        const canvas = document.getElementById('pdfCanvas')
        const ctx = canvas.getContext('2d')
        const viewport = page.getViewport({ scale: state.pdfScale })
        canvas.width = viewport.width
        canvas.height = viewport.height
        const renderContext = {
            canvasContext: ctx,
            viewport
        }
        page.render(renderContext)
    })
}
</script>

插件樣式也不好調(diào)整,不推薦。

總結(jié)

最后還是使用了第二種方式,作為禁止下載的展示。

以上就是Vue3實(shí)現(xiàn)pdf在線預(yù)覽的三種方式的詳細(xì)內(nèi)容,更多關(guān)于Vue3在線預(yù)覽pdf的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue.js購(gòu)物車添加商品組件的方法

    vue.js購(gòu)物車添加商品組件的方法

    這篇文章主要介紹了vue.js購(gòu)物車添加商品組件的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 在Vue3中使用event?bus(事件總線)的步驟詳解

    在Vue3中使用event?bus(事件總線)的步驟詳解

    在Vue?3中,可以通過(guò)創(chuàng)建一個(gè)事件總線(event?bus)來(lái)實(shí)現(xiàn)組件之間的通信,要在Vue?3中使用事件總線,主要步驟有:1、創(chuàng)建一個(gè)新的Vue實(shí)例作為事件總線,2、在組件中引入并使用該事件總線,以下是詳細(xì)的步驟和示例,需要的朋友可以參考下
    2025-01-01
  • ElementUI修改實(shí)現(xiàn)更好用圖片上傳預(yù)覽組件

    ElementUI修改實(shí)現(xiàn)更好用圖片上傳預(yù)覽組件

    這篇文章主要為大家介紹了ElementUI修改實(shí)現(xiàn)更好用圖片上傳預(yù)覽組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Vue生命周期實(shí)例分析總結(jié)

    Vue生命周期實(shí)例分析總結(jié)

    Vue的生命周期就是vue實(shí)例從創(chuàng)建到銷毀的全過(guò)程,也就是new Vue()開始就是vue生命周期的開始。Vue實(shí)例有?個(gè)完整的?命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模版、掛載Dom->渲染、更新->渲染、卸載等?系列過(guò)程,稱這是Vue的?命周期
    2022-10-10
  • vuex入門最詳細(xì)整理

    vuex入門最詳細(xì)整理

    在本篇文章里小編給大家分享的是關(guān)于vuex入門最詳細(xì)整理的相關(guān)內(nèi)容,需要的朋友們參考下。
    2020-03-03
  • 在Vue項(xiàng)目中集成和使用Lottie動(dòng)畫庫(kù)的步驟詳解

    在Vue項(xiàng)目中集成和使用Lottie動(dòng)畫庫(kù)的步驟詳解

    Lottie 是一個(gè)由 Airbnb 開源的動(dòng)畫庫(kù),它允許你在 Web、iOS、Android 等平臺(tái)上使用體積小、高性能的體驗(yàn)豐富的矢量動(dòng)畫,本文將詳細(xì)介紹在 Vue 項(xiàng)目中如何集成和使用 Lottie,文中有詳細(xì)的代碼講解,需要的朋友可以參考下
    2023-11-11
  • Vue3系列之effect和ReactiveEffect?track?trigger源碼解析

    Vue3系列之effect和ReactiveEffect?track?trigger源碼解析

    這篇文章主要為大家介紹了Vue3系列之effect和ReactiveEffect?track?trigger源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 詳細(xì)聊聊Vue的混入和繼承

    詳細(xì)聊聊Vue的混入和繼承

    混入(mixin)是一種非常靈活的方式,用來(lái)分發(fā)Vue組件中可復(fù)用的功能,一個(gè)混入對(duì)象可以包含任意組件選項(xiàng),下面這篇文章主要給大家介紹了關(guān)于Vue混入和繼承的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 使用 Vue cli 3.0 構(gòu)建自定義組件庫(kù)的方法

    使用 Vue cli 3.0 構(gòu)建自定義組件庫(kù)的方法

    本文旨在給大家提供一種構(gòu)建一個(gè)完整 UI 庫(kù)腳手架的思路。通過(guò)實(shí)例代碼給大家講解了使用 Vue cli 3.0 構(gòu)建自定義組件庫(kù)的方法,感興趣的朋友跟隨小編一起看看吧
    2019-04-04
  • 前端vue+elementUI如何實(shí)現(xiàn)記住密碼功能

    前端vue+elementUI如何實(shí)現(xiàn)記住密碼功能

    這篇文章主要給大家介紹了關(guān)于vue+elementUI如何實(shí)現(xiàn)記住密碼功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

河曲县| 察雅县| 理塘县| 芜湖市| 大悟县| 中江县| 邻水| 湖州市| 余姚市| 紫阳县| 隆化县| 德令哈市| 抚州市| 东辽县| 湄潭县| 南康市| 宽甸| 西华县| 沁源县| 睢宁县| 丹棱县| 马公市| 石家庄市| 枣阳市| 岳普湖县| 玉环县| 广饶县| 永兴县| 永平县| 花莲县| 鲜城| 专栏| 靖宇县| 稷山县| 白银市| 于田县| 年辖:市辖区| 延津县| 东辽县| 碌曲县| 新密市|