第一步:先下载pdfjs,网址:PDF下载地址,再引入到项目中,我是标签直接引用的

<script src="http://www.fly63.com/article/detial/9814/pdfjs/build/pdf.js"></script>
<script src="http://www.fly63.com/article/detial/9814/pdfjs/build/pdf.worker.js"></script>

第二步:html代码添加两行代码,一个是canvas用来绘图,一个是img用来最后展示转换后的pdf图片

<body>
<img :src="http://www.fly63.com/article/detial/9814/imgUrl" alt="" width="100%" height="auto">
<canvas id="the-canvas"></canvas>
</body>

第三步:js代码块,主要是将paf通过pdfjs插件绘制到canvas,然后再转换为QQ号卖号地图base64格式的图片

//url参数是pdf地址,imgUrl是最后的base64格式图片
showPdf(url) {
let _this = this;
let imgArr = [];
pdfjsLib.workerSrc = 'pdf.worker.js';
let loadingTask = pdfjsLib.getDocument(url);
loadingTask.promise.then(function(pdf) {
console.log('PDF loaded');
let pageNum = pdf.numPages;
// console.log(pageNum);
for (let i=1; i<=pageNum; i++) {
pdf.getPage(i).then(function(page) {
console.log('Page loaded');

let scale = 1;
let viewport = page.getViewport(scale);

// let canvas = document.getElementById('the-canvas');
let canvas = document.createElement("canvas");
let context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;

let renderContext = {
canvasContext: context,
viewport: viewport
};
let renderTask = page.render(renderContext);
renderTask.then(function () {
console.log('Page rendered');
let imgUrl = canvas.toDataURL('image/jpeg'); //转换为base64
if (imgUrl) {
imgArr[i-1] = imgUrl;
}
//pdf全部画完结束后操作
if (imgArr.length==pageNum&&!isEmpty(imgArr)) {
// let canvas2 = document.createElement("canvas");
let canvas2 = document.getElementById('the-canvas');
let context2 = canvas2.getContext('2d');
canvas2.height = viewport.height*pageNum;
canvas2.width = viewport.width;
let count = 0;
for (let j=0; j<imgArr.length; j++) {
let IMG = new Image();
IMG.src=imgArr[j];
IMG.width = viewport.width;
IMG.height = viewport.height;
IMG.onload = function () {
context2.drawImage(IMG,0,viewport.height*j);
count++;//确保所有img渲染结束后操作
if (count==pageNum) {
let canvas = document.getElementById('the-canvas');
//赋值给img
_this.imgUrl = canvas.toDataURL('image/jpeg');
}
}
}
}
});
});
}
}, function (reason) {
console.error(reason);
});

function isEmpty(arr) {
for(let i=0;i<arr.length;i++) {
if(!arr[i])
return true;
}
return false;
}
}


更多相关文章

  1. iOS获取图片区域主色的方法
  2. 如何用vue-Element-ui实现左侧无限级菜单?本文详细教你
  3. Java杂谈之重复代码是什么
  4. php操作redis命令及代码实例大全
  5. 华纳负责人yy988680
  6. 自定义一个kaniko镜像
  7. java web将数据导出为pdf格式文件代码
  8. php在线生成ico文件的代码
  9. PHP生成RSS文件类实例

随机推荐

  1. 有关XML入门的文章推荐10篇
  2. 关于App.config的9篇文章推荐
  3. 关于处理指令的10篇文章推荐
  4. 有关XHTML的相关推荐10篇
  5. 关于原理及性能的详细介绍
  6. 总结关于百度新闻注意点
  7. 关于添加链接的详细介绍
  8. 有关WSD的详细介绍
  9. 关于XML开发的详细介绍
  10. OpenSearch的汇总分享