国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2 使用pdf.js 實(shí)現(xiàn)pdf預(yù)覽,并可復(fù)制文本

這篇具有很好參考價(jià)值的文章主要介紹了vue2 使用pdf.js 實(shí)現(xiàn)pdf預(yù)覽,并可復(fù)制文本。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? 需求:pdf預(yù)覽,并且可以選中pdf的內(nèi)容進(jìn)行復(fù)制。? ? ? ??

????????在ruoyi的vue前端項(xiàng)目中用到,參考了網(wǎng)上不少文章,因?yàn)榇蟛糠譀]給具體的pdf.js版本,導(dǎo)致運(yùn)行過程中報(bào)各種api 錯(cuò)誤,經(jīng)過嘗試以下版本可用,故記錄一下:

? ? ? ? 安裝依賴:

 npm  install pdfjs-dist@2.0.943

? ? ? ? vue 頁(yè)面

<template>
  <div>
    <button @click="scalBig">放大</button>
    <button @click="scalSmall">縮小</button>
    <p>頁(yè)碼:{{ `${pageNo}/${totals.length}` }}</p>
    <div class="drag-box" id="dragBox" @scroll="scrollfun($event)">
      <el-scrollbar>
        <div class="wrapper" id="pdf-container">
          <div v-for="item in totals" :id="`page-${item}`" :key="item" class="pdf-box">
            <canvas :id="'canvas-pdf-' + item" class="canvas-pdf"></canvas>
          </div>
        </div>
      </el-scrollbar>
    </div>
  </div>
</template>
  
<script>
const PDFJS = require('pdfjs-dist')
PDFJS.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min')
import { TextLayerBuilder } from 'pdfjs-dist/web/pdf_viewer'
import 'pdfjs-dist/web/pdf_viewer.css'
import axios from 'axios';
export default {
  name: 'showPdf',
  // props: ['pdfUrl'],
  data() {
    return {
      scale: 1.4,
      totals: [],
      pageNo: 1,
      viewHeight: 0,
      pdfUrl: 'http://localhost/a.pdf'
    }
  },
  mounted() {
    this.renderPdf(this.scale)
  },
  watch: {
    scale(val) {
      this.totals = []
      this.renderPdf(val)
    }
  },
  methods: {
    async downloadAndConvertToUint8Array(pdfUrl) {
      // 使用 axios 發(fā)送 GET 請(qǐng)求獲取 PDF 文件數(shù)據(jù)
      const response = await axios({
        url: pdfUrl,
        method: 'GET',
        responseType: 'arraybuffer', // 設(shè)置響應(yīng)類型為 arraybuffer
      });

      // 將 arraybuffer 轉(zhuǎn)換為 Uint8Array
      const uint8Array = new Uint8Array(response.data);

      return uint8Array;
    },
    renderPdf(scale) {

      this.downloadAndConvertToUint8Array(this.pdfUrl)
        .then((uint8Array) => {
          console.log(uint8Array);
          // 現(xiàn)在你可以用這個(gè) Uint8Array 對(duì)象進(jìn)行進(jìn)一步處理,例如傳遞給PDF.js庫(kù)渲染PDF
          // 當(dāng) PDF 地址為跨域時(shí),pdf 應(yīng)該已流的形式傳輸,否則會(huì)出現(xiàn)pdf損壞無法展示
          PDFJS.getDocument(uint8Array).then(pdf => {
            // 得到PDF的總的頁(yè)數(shù)
            let totalPage = pdf.numPages
            let idName = 'canvas-pdf-'
            // 根據(jù)總的頁(yè)數(shù)創(chuàng)建相同數(shù)量的canvas
            this.createCanvas(totalPage, idName)
            for (let i = 1; i <= totalPage; i++) {
              pdf.getPage(i).then((page) => {
                let pageDiv = document.getElementById(`page-${i}`)
                let viewport = page.getViewport(scale)
                let canvas = document.getElementById(idName + i)
                let context = canvas.getContext('2d')
                canvas.height = viewport.height
                canvas.width = viewport.width
                this.viewHeight = viewport.height
                let renderContext = {
                  canvasContext: context,
                  viewport
                }
                // 如果你只是展示pdf而不需要復(fù)制pdf內(nèi)容功能,則可以這樣寫render
                // page.render(renderContext) 如果你需要復(fù)制則像下面那樣寫利用text-layer
                page.render(renderContext).then(() => {
                  return page.getTextContent()
                }).then((textContent) => {
                  // 創(chuàng)建文本圖層div
                  const textLayerDiv = document.createElement('div')
                  textLayerDiv.setAttribute('class', 'textLayer')
                  // 將文本圖層div添加至每頁(yè)pdf的div中
                  pageDiv.appendChild(textLayerDiv)
                  // 創(chuàng)建新的TextLayerBuilder實(shí)例
                  let textLayer = new TextLayerBuilder({
                    textLayerDiv: textLayerDiv,
                    pageIndex: page.pageIndex,
                    viewport: viewport
                  })
                  textLayer.setTextContent(textContent)
                  textLayer.render()
                })
              })
            }
          })
        })
        .catch((error) => {
          console.error('Error downloading or converting the PDF:', error);
        });


    },
    createCanvas(totalPages) {
      for (let i = 1; i <= totalPages; i++) {
        this.totals.push(i)
      }
    },
    // 分頁(yè)
    scrollfun(e) {
      let scrollTop = e.target.scrollTop
      if (scrollTop === 0) {
        this.pageNo = 1
      } else {
        this.pageNo = Math.ceil(scrollTop / this.viewHeight)
      }
    },
    // 放大
    scalBig() {
      this.scale = this.scale + 0.1
    },
    // 縮小
    scalSmall() {
      if (this.scale > 1.2) {
        this.scale = this.scale - 0.1
      }
    }
  }
}
</script>
  
<style scoped lang="scss">
.drag-box {
  height: 800px;
}

.pdf-box {
  position: relative;
}

.el-scrollbar__wrap {
  overflow-x: hidden;
}
</style>

? ? ? ? 運(yùn)行效果:

vue2 使用pdf.js 實(shí)現(xiàn)pdf預(yù)覽,并可復(fù)制文本,javascript,pdf,vue.js

? ?

?????????文章來源地址http://www.zghlxwxcb.cn/news/detail-805912.html

到了這里,關(guān)于vue2 使用pdf.js 實(shí)現(xiàn)pdf預(yù)覽,并可復(fù)制文本的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu):鏈棧(含完整代碼,可復(fù)制)

    ? ? ? ?鏈棧是采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)的棧,通常用單鏈表來表示。鏈棧的優(yōu)點(diǎn)是不存在棧滿上溢的情況(只有在內(nèi)存溢出時(shí)才會(huì)出現(xiàn)棧滿,通常不考慮)。鏈棧的棧頂是鏈表的第一個(gè)結(jié)點(diǎn),棧底是鏈表的最后一個(gè)結(jié)點(diǎn),一個(gè)鏈棧可以由棧頂指針唯一確定。鏈棧的每個(gè)結(jié)點(diǎn)都

    2024年02月01日
    瀏覽(17)
  • 完全可復(fù)制、經(jīng)過驗(yàn)證的 Go 工具鏈

    完全可復(fù)制、經(jīng)過驗(yàn)證的 Go 工具鏈

    原文在這里。 由 Russ Cox 發(fā)布于 2023年8月28日 開源軟件的一個(gè)關(guān)鍵優(yōu)勢(shì)是任何人都可以閱讀源代碼并檢查其功能。然而,大多數(shù)軟件,甚至是開源軟件,都以編譯后的二進(jìn)制形式下載,這種形式更難以檢查。如果攻擊者想對(duì)開源項(xiàng)目進(jìn)行供應(yīng)鏈攻擊,最不可見的方式是替換正

    2024年02月10日
    瀏覽(32)
  • 【vue2中的pdf預(yù)覽】iframe/pdf.js/vue-pdf

    vue2中預(yù)覽pdf的方法有pdf.js和vue-pdf等。下面進(jìn)行簡(jiǎn)單對(duì)比使用方法的介紹。 使用iframe預(yù)覽pdf 如果后端返回的不是url,那么需要使用 responseType = \\\'blob\\\' 來讀取后端傳來的內(nèi)容。 擴(kuò)展: 同樣是使用iframe進(jìn)行預(yù)覽,如果有 其他格式 如word/xls/ppt/txt的文件需要預(yù)覽,可以使用微軟解

    2024年02月09日
    瀏覽(75)
  • [軟件工具]AI軟件離線表格識(shí)別工具使用教程圖像轉(zhuǎn)excel轉(zhuǎn)表格可復(fù)制文字表格導(dǎo)出實(shí)時(shí)截圖識(shí)別成表格

    [軟件工具]AI軟件離線表格識(shí)別工具使用教程圖像轉(zhuǎn)excel轉(zhuǎn)表格可復(fù)制文字表格導(dǎo)出實(shí)時(shí)截圖識(shí)別成表格

    【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR.git 【算法介紹】 PaddleOCR是一個(gè)基于PaddlePaddle框架的開源光學(xué)字符識(shí)別(OCR)工具庫(kù),由百度公司開發(fā)。它提供了一套完整的OCR解決方案,包括文字檢測(cè)、文字識(shí)別以及版面分析等功能。PaddleOCR旨在幫助開發(fā)者和研究者快速構(gòu)

    2024年01月18日
    瀏覽(25)
  • python煙花代碼簡(jiǎn)單可復(fù)制,python煙花代碼怎么寫

    python煙花代碼簡(jiǎn)單可復(fù)制,python煙花代碼怎么寫

    大家好,本文將圍繞Python煙花代碼總體功能介紹展開說明,python煙花代碼簡(jiǎn)單可復(fù)制是一個(gè)很多人都想弄明白的事情,想搞清楚python煙花代碼怎么寫需要先了解以下幾個(gè)事情。 Source code download: 本文相關(guān)源碼 疫情太嚴(yán)重了,有很多小伙伴都不能出門玩耍了。給大家看一個(gè)特別

    2024年02月20日
    瀏覽(29)
  • python煙花代碼簡(jiǎn)單可復(fù)制,python煙花代碼怎么運(yùn)行

    python煙花代碼簡(jiǎn)單可復(fù)制,python煙花代碼怎么運(yùn)行

    大家好,小編來為大家解答以下問題,Python煙花代碼總體功能介紹,python煙花代碼簡(jiǎn)單可復(fù)制,今天讓我們一起來看看吧! 天是2023?的第9天,到了這個(gè)時(shí)間點(diǎn),部分小伙伴已經(jīng)開始復(fù)盤這一年的得與失。比如今年增加了多少技能點(diǎn),看了多少本書,寫了多少篇文章或者年前

    2024年01月22日
    瀏覽(42)
  • python煙花代碼簡(jiǎn)單可復(fù)制,python煙花代碼加名字

    python煙花代碼簡(jiǎn)單可復(fù)制,python煙花代碼加名字

    本篇文章給大家談?wù)凱ython煙花代碼總體功能介紹,以及python煙花代碼簡(jiǎn)單可復(fù)制,希望對(duì)各位有所幫助,不要忘了收藏本站喔。 還有兩天就到元旦了!??!很多小伙伴已經(jīng)和朋友約好一起跨年了 但是現(xiàn)在很多地方都禁止煙花燃放,跨年沒有煙花總感覺缺少一點(diǎn)味道~為了實(shí)現(xiàn)

    2024年03月15日
    瀏覽(22)
  • python編程游戲代碼可復(fù)制,python編程游戲代碼教程

    python編程游戲代碼可復(fù)制,python編程游戲代碼教程

    大家好,小編來為大家解答以下問題,python編程游戲代碼大全,編程貓,python編程游戲代碼大全200行,今天讓我們一起來看看吧! Source code download: 本文相關(guān)源碼 大家好,給大家分享一下python編程游戲代碼大全,很多人還不知道這一點(diǎn)。下面詳細(xì)解釋一下python自動(dòng)化運(yùn)維應(yīng)用。

    2024年04月10日
    瀏覽(23)
  • python游戲代碼大全可復(fù)制,python最簡(jiǎn)單游戲代碼

    python游戲代碼大全可復(fù)制,python最簡(jiǎn)單游戲代碼

    大家好,小編來為大家解答以下問題,python游戲編程入門游戲代碼,python游戲代碼大全可復(fù)制,現(xiàn)在讓我們一起來看看吧! 哈嘍鐵子們 表弟最近在學(xué)Python,總是跟我抱怨很枯燥無味,其實(shí),他有沒有認(rèn)真想過,可能是自己學(xué)習(xí)姿勢(shì)不對(duì)? 比方說,可以通過打游戲來學(xué)編程!

    2024年04月17日
    瀏覽(29)
  • vue+pdf.js預(yù)覽本地pdf文件(可以復(fù)制文本,滾動(dòng)頁(yè)碼展示)

    vue+pdf.js預(yù)覽本地pdf文件(可以復(fù)制文本,滾動(dòng)頁(yè)碼展示)

    1、安裝pdfjs-dist插件,推薦使用2.0.943這個(gè)版本 2、頁(yè)面中引入使用 3、頁(yè)面標(biāo)簽 3、解析pdf,獲取pdf所有頁(yè)數(shù)據(jù),使用canvas渲染,并使用TextLayerBuilder創(chuàng)建文本層,可以復(fù)制文本信息 在渲染pdf數(shù)據(jù)時(shí),當(dāng)pdf文件很大渲染量很多時(shí),會(huì)導(dǎo)致頁(yè)面卡住,無法執(zhí)行其他操作;這涉及到

    2024年01月21日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包