婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用PDF.js渲染canvas實現預覽pdf的效果示例

使用PDF.js渲染canvas實現預覽pdf的效果示例

熱門標簽:地圖標注沿海城市房價 通遼地圖標注app 威海語音外呼系統平臺 地圖標注員工作內容 江西ai電銷機器人如何 智能語音電銷機器人客戶端 高德地圖標注廁所 中國地圖標注城市的 西安金倫外呼系統

一、PDF.js的下載

從官網直接下載即可,地址:http://mozilla.github.io/pdf.js/getting_started/#download

建議下載穩定版本,如下圖所示:

下載完成后將壓縮包解壓放在項目下,按照正常引入方式引入即可。

二、使用PDF.js

1.vue使用

第一步安裝:

npm install --save pdfjs-dist

第二步引入:

import PDFJS from 'pdfjs-dist'

第三步就是在頁面使用即可,下面演示export default中的代碼:

export default {
 data () {
  return {
   pdfDoc: null,
   pageNum: 1,
   pageRendering: false,
   pageNumPending: null,
   scale: 0.9
  }
 },
 methods: {
  showPDF (url) {
   let _this = this
   PDFJS.getDocument(url).then(function (pdf) {
    _this.pdfDoc = pdf
    _this.renderPage(1)
   })
  },
  renderPage (num) {
   this.pageRendering = true
   let _this = this
   this.pdfDoc.getPage(num).then(function (page) {
    var viewport = page.getViewport(_this.scale)
    let canvas = document.getElementById('the-canvas')
    canvas.height = viewport.height
    canvas.width = viewport.width

    // Render PDF page into canvas context
    var renderContext = {
     canvasContext: canvas.getContext('2d'),
     viewport: viewport
    }
    var renderTask = page.render(renderContext)
  
    // Wait for rendering to finish
    renderTask.promise.then(function () {
     _this.pageRendering = false
     if (_this.pageNumPending !== null) {
      // New page rendering is pending
      this.renderPage(_this.pageNumPending)
      _this.pageNumPending = null
     }
    })
   })
  },
  queueRenderPage (num) {
   if (this.pageRendering) {
    this.pageNumPending = num
   } else {
    this.renderPage(num)
   }
  },
  onPrevPage () {
   if (this.pageNum <= 1) {
    return
   }
   this.pageNum--
   this.queueRenderPage(this.pageNum)
  },
  onNextPage () {
   if (this.pageNum >= this.pdfDoc.numPages) {
    return
   }
   this.pageNum++
   this.queueRenderPage(this.pageNum)
  }
 }
}

2.HTML(5)使用

第一步正常下載后解壓放入項目中;

第二步在項目的頁面引入即可,項目結構如下圖:

由于是公司項目,我將項目名遮住,大家自行取名即可,我在此處將PDF.js放入了js目錄下,大家也可以直接放在項目的根目錄下。

引入如下代碼:

<script type='text/javascript' src='js/PDF.js/build/pdf.js'></script>

第三步即可在js中使用。

① 引入單頁的pdf:

var url = sessionStorage.sencondExperience_filePath;
pdfjsLib.workerSrc = 'PDF.js/build/pdf.worker.js';
pdfjsLib.getDocument(url).then(function getPdfHelloWorld(pdf) {
	pdf.getPage(1).then(function getPageHelloWorld(page) {
		var scale = 1;
		var viewport = page.getViewport(scale);
		var canvas = document.getElementById('the-canvas');
		var context = canvas.getContext('2d');
		canvas.height = viewport.height;
		canvas.width = viewport.width;
		var renderContext = {
			canvasContext: context,
			viewport: viewport
		};
		page.render(renderContext);
	});
});

需要注意的是pdfjsLib.workerSrc中,如果換成是PDFJS.workerSrc會報錯:PDFJS is notdefined。有博客說在其之前加上PDFJS.disableWorker = true;會避免出錯,但我嘗試了錯誤依然存在。使用pdfjsLib.workerSrc不會出錯!!!

②引入多頁的pdf:

方法一:在html中設置好pdf頁數對應的canvas,然后使用js一頁一頁的去渲染canvas。

html:

<canvas id="the-canvas01"></canvas>
<canvas id="the-canvas02"></canvas>
<canvas id="the-canvas03"></canvas>

js:

var url = sessionStorage.third_filePath;
pdfjsLib.workerSrc = 'PDF.js/build/pdf.worker.js';
pdfjsLib.getDocument(url).then(function getPdfHelloWorld(pdf) {
	pdf.getPage(1).then(function getPageHelloWorld(page) {
		var scale = 1;
		var viewport = page.getViewport(scale);
		var canvas = document.getElementById('the-canvas01');
		var context = canvas.getContext('2d');
		canvas.height = viewport.height;
		canvas.width = viewport.width;
		var renderContext = {
			canvasContext: context,
			viewport: viewport
		};
		page.render(renderContext);
	});
	pdf.getPage(2).then(function getPageHelloWorld(page) {
		var scale = 1;
		var viewport = page.getViewport(scale);
		var canvas = document.getElementById('the-canvas02');
		var context = canvas.getContext('2d');
		canvas.height = viewport.height;
		canvas.width = viewport.width;
		var renderContext = {
			canvasContext: context,
			viewport: viewport
		};
		page.render(renderContext);
	});
	pdf.getPage(3).then(function getPageHelloWorld(page) {
		var scale = 1;
		var viewport = page.getViewport(scale);
		var canvas = document.getElementById('the-canvas03');
		var context = canvas.getContext('2d');
		canvas.height = viewport.height;
		canvas.width = viewport.width;
		var renderContext = {
			canvasContext: context,
			viewport: viewport
		};
		page.render(renderContext);
	});
});

可想而知,這種方法對于頁面較少的pdfHIA比較合適,但是若是頁數很多或者是不知道pdf的頁數的情況,這種方法顯然不適合了,由此推薦方法二。

方法二:只需要定義好在需要渲染的位置,再根據pdf的頁數去動態渲染canvas。

html

< div id="canvas"></ div>

js

//PDF轉成圖片
var url = sessionStorage.other_filePath;
pdfjsLib.workerSrc = 'PDF.js/build/pdf.worker.js';
//創建
function createPdfContainer(id, className) {
    var pdfContainer = document.getElementById('canvas');
    var canvasNew = document.createElement('canvas');
    $("canvas").on("click",function() {
		var url = sessionStorage.other_filePath;
		window.open(url);
    })
    canvasNew.id = id;
    canvasNew.className = className;
    pdfContainer.appendChild(canvasNew);
};

//渲染pdf
//建議給定pdf寬度
function renderPDF(pdf, i, id) {
    pdf.getPage(i).then(function (page) {

        var scale = 0.62;
        var viewport = page.getViewport(scale);

        //
        //  準備用于渲染的 canvas 元素
        //

        var canvas = document.getElementById(id);
        var context = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = document.documentElement.clientWidth;

        //
        // 將 PDF 頁面渲染到 canvas 上下文中
        //
        var renderContext = {
            canvasContext: context,
            viewport: viewport
        };
        page.render(renderContext);
    });
};
//創建和pdf頁數等同的canvas數
function createSeriesCanvas(num, template) {
    var id = '';
    for (var j = 1; j <= num; j++) {
        id = template + j;
        createPdfContainer(id, 'pdfClass');
    }
}
//讀取pdf文件,并加載到頁面中
function loadPDF(fileURL) {
    pdfjsLib.getDocument(fileURL).then(function (pdf) {
        //用 promise 獲取頁面
        var id = '';
        var idTemplate = 'cw-pdf-';
        var pageNum = pdf.numPages;
        //根據頁碼創建畫布
        createSeriesCanvas(pageNum, idTemplate);
        //將pdf渲染到畫布上去
        for (var i = 1; i <= pageNum; i++) {
            id = idTemplate + i;
            renderPDF(pdf, i, id);
        }
    });
}
loadPDF(url)

三、報錯

1.Uncaught TypeError: Cannot read property ‘getContext’ of null

這個錯誤是因為在html中需要先寫好<canvas>標簽,定義好id,不能使用div或其他標簽。

在html中:

<canvas id="my-canvas"></canvas>

2.Uncaught (in promise) UnknownErrorException {name: “UnknownErrorException”, message: “Failed to fetch”, details: “UnknownErrorException: Failed to fetch”}

這個意思是未能捕獲未知錯誤。我在此處出錯的原因主要是后臺給的pdf路徑有問題導致的,換一個正確的即可~~

3.Uncaught (in promise) InvalidPDFException {name: “InvalidPDFException”, message: “Invalid PDF structure”}

這個意思是說無效的PDF格式的結構,其實就是代碼中渲染pdf時的結構出現錯誤導致的,我是因為直接對pdf的頁數:pdf.numPages循環,再去
渲染在canvas導致出錯。錯誤代碼如下:

for(const i in pdf.numPages){
	pdf.getPage(i).then(function getPageHelloWorld(page) {
		var scale = 1;
		var viewport = page.getViewport(scale);
		var id = i > 9 ? 'the-canvas' + i : 'the-canvas0' + i;
		var canvas = document.getElementById(id);
		var context = canvas.getContext('2d');
		canvas.height = viewport.height;
		canvas.width = viewport.width;
		var renderContext = {
			canvasContext: context,
			viewport: viewport
		};
		page.render(renderContext);
	});
}

此時將id打印才明白所有id都為 the-canvas15,出現這個錯誤主要還是js功底不夠扎實導致......所以不能這樣簡單的循環渲染,正確的解決
方法請看上面的講解!!!

由此關于PDF.js的使用總結就到這了,有什么問題請留言撒~~

到此這篇關于使用PDF.js渲染canvas實現預覽pdf的效果示例的文章就介紹到這了,更多相關PDF.js渲染canvas內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

標簽:青海 北海 崇左 眉山 阜陽 營口 河池 晉中

巨人網絡通訊聲明:本文標題《使用PDF.js渲染canvas實現預覽pdf的效果示例》,本文關鍵詞  使用,PDF.js,渲染,canvas,實現,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用PDF.js渲染canvas實現預覽pdf的效果示例》相關的同類信息!
  • 本頁收集關于使用PDF.js渲染canvas實現預覽pdf的效果示例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产99精品国产| 日韩精品免费视频人成| 久久久噜噜噜久久中文字幕色伊伊 | 国产欧美精品日韩区二区麻豆天美| 国产精品色眯眯| 欧美极品少妇xxxxⅹ高跟鞋| 欧美午夜不卡视频| 日韩视频一区二区三区| 久久久精品免费观看| 亚洲欧美一区二区视频| 日韩电影在线免费| 精品美女在线播放| 国产精品综合久久| 成人午夜碰碰视频| 亚洲一区视频在线| 久久久激情视频| 色哟哟精品一区| 99在线精品免费| 成熟亚洲日本毛茸茸凸凹| 久久精品国产久精国产| 国产麻豆精品95视频| 亚欧色一区w666天堂| 粉嫩av亚洲一区二区图片| 樱桃视频在线观看一区| 日韩一区二区三区电影 | 精品一区精品二区高清| 一区二区三区日韩欧美| 美女脱光内衣内裤视频久久网站| 国产精品久久久久一区二区三区 | 狠狠色丁香婷婷综合| 精品一区二区三区免费毛片爱| 亚洲乱码日产精品bd| 久久久精品tv| 欧美bbbbb| jvid福利写真一区二区三区| 91免费在线看| 国产精品99久久久| 亚洲美女视频一区| 亚洲成人av一区| 成人综合在线视频| 99精品欧美一区二区三区小说| 欧美日韩五月天| www.亚洲色图| 国产亚洲婷婷免费| 婷婷夜色潮精品综合在线| 一区二区理论电影在线观看| 日本一不卡视频| 亚洲国产日产av| 日韩精品一区二区三区视频在线观看 | 久久精品亚洲国产奇米99| 麻豆久久久久久久| 精品日产卡一卡二卡麻豆| 一区二区三区日韩精品视频| 成人毛片老司机大片| 成人高清免费观看| 久久久久久久电影| 91麻豆免费看| 黄色资源网久久资源365| 欧美日韩久久久| 亚洲另类色综合网站| 天天综合网 天天综合色| 91污片在线观看| 欧美色欧美亚洲另类二区| 国产成人免费在线观看| 国产精品三级久久久久三级| 国产精品一二三四五| 亚洲三级理论片| 欧美成人三级在线| 国产精品一卡二卡在线观看| 久久综合九色综合97婷婷女人| 国产一区二区三区电影在线观看| 国产精品网站导航| 欧美丰满美乳xxx高潮www| 美日韩一区二区| 欧美高清在线精品一区| 欧美电影在线免费观看| 波多野结衣欧美| 蜜桃视频一区二区三区在线观看| 久久精品欧美一区二区三区不卡| 欧美日韩激情一区| 91丝袜国产在线播放| 久久99久久99小草精品免视看| 亚洲精品综合在线| 欧美国产精品一区二区三区| 欧美午夜片在线观看| 国产福利91精品| 国内成人免费视频| 狠狠色伊人亚洲综合成人| 日韩高清中文字幕一区| 性感美女极品91精品| 美女一区二区久久| 欧美日韩一区二区三区在线| 91色porny在线视频| 69av一区二区三区| 中文字幕中文字幕在线一区| 久久99国产精品麻豆| 国产精品综合网| 色综合天天综合色综合av| 久久久噜噜噜久久人人看| 国产精品视频免费| 色中色一区二区| 91蝌蚪porny| 欧美一区二区免费| 国产日韩欧美一区二区三区综合 | 亚洲一级二级三级| 午夜精彩视频在线观看不卡| 美女一区二区三区| jizzjizzjizz欧美| 亚洲另类色综合网站| 国产九色sp调教91| 欧美日韩一区国产| 成人欧美一区二区三区1314| 日本一道高清亚洲日美韩| 成a人片亚洲日本久久| 91精品国产91久久综合桃花| 国产精品国产三级国产普通话蜜臀| 亚洲色图欧美在线| 国精产品一区一区三区mba视频 | 成人免费高清在线| 欧美日韩国产bt| 色素色在线综合| 一区二区在线免费观看| 欧美一级淫片007| 粉嫩av一区二区三区| 亚洲第一激情av| 欧美va天堂va视频va在线| 国产精品一区二区黑丝| 一区二区三区在线视频观看58| 亚洲丝袜精品丝袜在线| 欧美午夜理伦三级在线观看| 亚洲男同性视频| 91精品国产综合久久福利软件| 欧美日韩免费观看一区二区三区 | 美女尤物国产一区| 不卡一区在线观看| 久久精品一区八戒影视| 午夜av电影一区| 日韩一区二区在线观看视频播放| 久久久久久97三级| 久久精品国产一区二区三区免费看| ㊣最新国产の精品bt伙计久久| 精品在线一区二区三区| 国产精品国产三级国产三级人妇| 亚洲国产精品一区二区久久 | 亚洲午夜一二三区视频| 欧美日韩成人综合| 久久机这里只有精品| 色综合中文字幕国产 | 亚洲免费观看高清完整版在线观看熊| 国产精品二三区| 午夜a成v人精品| 色综合久久久久久久久| 国产亚洲精品aa| 国产一区二区伦理片| 91久久精品午夜一区二区| 中文字幕一区二区三| 精品一区二区精品| 91精品国产综合久久久久久久| 亚洲午夜久久久久久久久电影网 | 69久久夜色精品国产69蝌蚪网| 91.com视频| 丝袜诱惑亚洲看片| 天堂一区二区在线免费观看| 欧美性受极品xxxx喷水| 国产在线播放一区| 在线电影院国产精品| ㊣最新国产の精品bt伙计久久| 欧美aⅴ一区二区三区视频| 国产一区二区三区在线看麻豆| 国产精品蜜臀在线观看| 午夜精品久久久久久久久久久 | 国产精品国产三级国产| 麻豆国产精品一区二区三区| 国产精品久久久久久久久果冻传媒 | 国产精品区一区二区三区 | 日本韩国欧美国产| 亚洲狠狠丁香婷婷综合久久久| 国产91精品入口| 在线亚洲高清视频| 大胆欧美人体老妇| 一区二区三区资源| 一本色道久久综合亚洲aⅴ蜜桃| 欧美国产日韩在线观看| 国产精品乱码人人做人人爱| 精品视频在线视频| 国内欧美视频一区二区| 精品国产亚洲一区二区三区在线观看| 九九精品一区二区| 欧美变态tickling挠脚心| 国产成人精品三级麻豆| 国产视频一区不卡| 亚洲精品一区二区三区香蕉 | 亚洲天堂久久久久久久| 在线观看av一区二区| 国产资源在线一区| 亚洲色图视频网站| 日韩电影在线一区二区三区| 91小视频免费看| 亚洲第四色夜色| 久久疯狂做爰流白浆xx|