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

純前端使用插件pdfjs實(shí)現(xiàn)將pdf轉(zhuǎn)為圖片的步驟

 更新時(shí)間:2025年01月18日 09:08:07   作者:鍵.  
這篇文章主要介紹了純前端使用插件pdfjs實(shí)現(xiàn)將pdf轉(zhuǎn)為圖片的步驟,在實(shí)現(xiàn)過(guò)程中遇到了跨域問(wèn)題,后臺(tái)設(shè)置跨域但前端配置無(wú)效,最終采用后臺(tái)返回PDF的base64格式,通過(guò)PDF.js將base64轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)加載PDF,需要的朋友可以參考下

需求來(lái)源

預(yù)覽簡(jiǎn)歷功能在移動(dòng)端,由于用了一層iframe把這個(gè)功能嵌套在了app端,再用一個(gè)iframe來(lái)預(yù)覽,只有ios能看到,安卓就不支持,查了很多資料和插件,原理基本上都是用iframe實(shí)現(xiàn)的。最終轉(zhuǎn)換思路,將pdf下載轉(zhuǎn)為圖片然后繪制到canvans中也是一樣的效果。

實(shí)現(xiàn)步驟

先安裝pdfjs插件,插件開(kāi)源免費(fèi)

官網(wǎng):

https://github.com/mozilla/pdf.js

在vue或react項(xiàng)目中使用
https://github.com/mozilla/pdf.js/wiki/Setup-pdf.js-in-a-website

npm install pdfjs-dist --save

上面幾步完成后就完成80%了,剩下的就是把圖片繪制到canvans了

這里我直接貼源碼了,注意一點(diǎn),官方的示例中沒(méi)有import 'pdfjs-dist/build/pdf.worker.mjs'; 這一段導(dǎo)入,會(huì)有一個(gè)報(bào)錯(cuò)

gihub上有解釋
https://github.com/mozilla/pdf.js/issues/10478

<template>
  <div ref="showpdfRef"></div>
</template>

<script setup>
import { ref } from 'vue';
import { getDocument } from 'pdfjs-dist/legacy/build/pdf.mjs';
import 'pdfjs-dist/build/pdf.worker.mjs';

const showpdfRef = ref(null);

const pdfPath ='xxxxxxxx'

const loadingTask = getDocument(pdfPath);
loadingTask.promise
  .then(async (pdf) => {
    const canvas = document.createElement('canvas');
    const context = canvas.getContext('2d');
    // 循環(huán)遍歷每一頁(yè)pdf,將其轉(zhuǎn)成圖片
    for (let i = 1; i <= pdf._pdfInfo.numPages; i++) {
      // 獲取pdf頁(yè)
      const page = await pdf.getPage(i);
      // 獲取頁(yè)的尺寸
      const viewport = page.getViewport({ scale: 1 });
      // 設(shè)置canvas的尺寸
      canvas.width = viewport.width;
      canvas.height = viewport.height;
      // 將pdf頁(yè)渲染到canvas上
      await page.render({ canvasContext: context, viewport: viewport }).promise;
      // 將canvas轉(zhuǎn)成圖片,并添加到頁(yè)面上
      const img = document.createElement('img');
      img.src = canvas.toDataURL('image/png');
      showpdfRef.value.appendChild(img);
    }
   
  })
  .then(
    function () {
      console.log('# End of Document');
    },
    function (err) {
      console.error('Error: ' + err);
    },
  );
</script>

<style scoped></style>

最終效果:

問(wèn)題

跨域

我直接放入設(shè)置了跨域的鏈接到url是可以直接得到pdf的,但是目前這個(gè)跨域問(wèn)題,后臺(tái)說(shuō)是有設(shè)置跨域,但是我請(qǐng)求有跨域,我在前端配置了跨域也還是不行。多番嘗試后這個(gè)問(wèn)題還是沒(méi)有解決。由于時(shí)間緊迫,所以采用備用方案:后臺(tái)在接口返回了pdf的base64格式,pdfjs官方案例中說(shuō)需要將base64轉(zhuǎn)為二進(jìn)制數(shù)據(jù)就可以加載。
https://github.com/mozilla/pdf.js/blob/master/examples/learning/helloworld64.html

總結(jié)

到此這篇關(guān)于純前端使用插件pdfjs實(shí)現(xiàn)將pdf轉(zhuǎn)為圖片的文章就介紹到這了,更多相關(guān)插件pdfjs將pdf轉(zhuǎn)為圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS實(shí)現(xiàn)新建文件夾功能

    JS實(shí)現(xiàn)新建文件夾功能

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)新建文件夾功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 深入理解JavaScript的async/await

    深入理解JavaScript的async/await

    我們給大家分享了關(guān)于JavaScript的async/await的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-08-08
  • JavaScript數(shù)組降維之將二維數(shù)組轉(zhuǎn)為一維數(shù)組的五種方案

    JavaScript數(shù)組降維之將二維數(shù)組轉(zhuǎn)為一維數(shù)組的五種方案

    本文介紹了五種數(shù)組降維方法,從最簡(jiǎn)單的Array.prototype.flat()方法,到兼容舊版本的concat;spread方法,再到通用的reduce方法,以及處理任意深度嵌套的遞歸方法, 兌時(shí)建議總結(jié)不同方法的特點(diǎn)、適用場(chǎng)景和性能差異,需要的朋友可以參考下
    2026-05-05
  • JavaScript之BOM?location對(duì)象+navigator對(duì)象+history?對(duì)象

    JavaScript之BOM?location對(duì)象+navigator對(duì)象+history?對(duì)象

    這篇文章主要介紹了JavaScript?BOM中的?location對(duì)象、navigator對(duì)象、history?對(duì)象,下面圍繞他們的相關(guān)語(yǔ)法及各種資料展開(kāi)文章詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)大家有所幫助
    2021-12-12
  • js仿百度切換皮膚功能(html+css)

    js仿百度切換皮膚功能(html+css)

    這篇文章主要為大家詳細(xì)介紹了JavaScript仿百度切換皮膚功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • JS轉(zhuǎn)換金額大寫(xiě)方法詳細(xì)例子

    JS轉(zhuǎn)換金額大寫(xiě)方法詳細(xì)例子

    在處理財(cái)務(wù)賬款類需求時(shí)需要將轉(zhuǎn)賬金額寫(xiě)成大寫(xiě)的,下面這篇文章主要給大家介紹了關(guān)于JS轉(zhuǎn)換金額大寫(xiě)方法的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-10-10
  • 如何用JS實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局

    如何用JS實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局

    這篇文章主要介紹了如何用JS實(shí)現(xiàn)網(wǎng)頁(yè)瀑布流布局,幫助大家更好的利用JavaScript制作網(wǎng)頁(yè),感興趣的朋友可以了解下
    2021-04-04
  • Echarts如何自定義label標(biāo)簽的樣式(formatter,rich,添加圖標(biāo)等操作)

    Echarts如何自定義label標(biāo)簽的樣式(formatter,rich,添加圖標(biāo)等操作)

    通常情況下,echarts中對(duì)于圖像的設(shè)置是統(tǒng)一的,下面這篇文章主要給大家介紹了關(guān)于Echarts如何自定義label標(biāo)簽的樣式的相關(guān)資料,包括formatter,rich,添加圖標(biāo)等操作,需要的朋友可以參考下
    2023-02-02
  • 原生JS實(shí)現(xiàn)懸停下拉菜單

    原生JS實(shí)現(xiàn)懸停下拉菜單

    這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)懸停下拉菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • js模擬F11頁(yè)面全屏顯示

    js模擬F11頁(yè)面全屏顯示

    這篇文章主要為大家詳細(xì)介紹了js模擬實(shí)現(xiàn)F11使頁(yè)面全屏顯示,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評(píng)論

车致| 宁远县| 彭州市| 临高县| 余庆县| 定结县| 台北县| 扎赉特旗| 广安市| 兰州市| 板桥市| 绥化市| 武宣县| 阜平县| 龙游县| 德兴市| 吉安市| 大同县| 襄汾县| 清流县| 榆中县| 富民县| 保德县| 喀喇| 乌苏市| 饶阳县| 兴海县| 锡林浩特市| 怀柔区| 绿春县| 当涂县| 景谷| 长丰县| 芮城县| 宜春市| 松溪县| 澄城县| 五台县| 射阳县| 屏山县| 庆安县|