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

<script src="pdfjs/build/pdf.js"></script>
<script src="pdfjs/build/pdf.worker.js"></script>  

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

<body>
<img :src="imgUrl" alt="" width="100%" height="auto">
<canvas id="the-canvas" style="display: none"></canvas>
</body>

第三步:js代码块,主要是将paf通过pdfjs插件绘制到canvas,然后再转换为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;
}
}

转载于:https://blog.csdn.net/xxjiushini/article/details/109473403?utm_medium=distribute.pc_category.none-task-blog-hot-6.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-6.nonecase

前端PDF文件转图片方法的更多相关文章

  1. 深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  2. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  3. 深入学习Python解析并解密PDF文件内容的方法

    前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...

  4. JavaWeb项目生成PDF文件添加水印图片并导出

    一.前言 首先需要在Maven中添加相应的jar包依赖,若项目没用到Maven,也可自行下载相应所需的jar包(itextpdf.jar 与 itext-asian.jar),如下图所示.点此下载 M ...

  5. C#如何在PDF文件添加图片印章

    文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述 ...

  6. Java给图片和PDF文件添加水印(图片水印和文字水印)

    有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...

  7. 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  8. C# PDF文件转图片

    参考:https://blog.csdn.net/lai124793549/article/details/53392281 https://www.cnblogs.com/xiewei123/p/1 ...

  9. 用 ghostscript 转化PDF文件为图片 的参数设置

    example: gswin32 -dSAFER -dBATCH -dNOPAUSE -r300 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=jp ...

随机推荐

  1. Java_day_01

    一.方法的定义 方法的定义在Java中可以使用多种方式,如果在定义的方法名前面加上 public static 关键字,即可直接在主方法(main)中调用 public class Method{ p ...

  2. 用python写图片格式批量处理工具

    一.思路分析 其实,照片处理要求很简单,主要是两个方面:一个是调整图片尺寸(即宽x高),另一个是调整图片的大小(即压缩).为了实现这两个功能,利用python中的PIL库即可,其安装方法如下: pip ...

  3. Python爬取房天下二手房信息

    一.相关知识 BeautifulSoup4使用 python将信息写入csv import csv with open("11.csv","w") as csv ...

  4. Ubuntu命令集(持续更新)

    Ubuntu命令集,生活工作汇总,没有顺序.(持续更新...) 1 pwd:没有参数,在终端现实我们当前所处的文件夹位置:ctrl+l:清除当前终端屏: 2 --------------------- ...

  5. python初学者-输入一个数判断奇偶性

    num = int(input("请输入一个整数:")) if num%2 == 0: print("这个数是偶数",num) else: print(&quo ...

  6. IDEA控制台打印程序内汉字乱码及txt文本乱码

    控制台打印汉字乱码 解决IntelliJ IDEA控制台输出中文乱码问题 txt文本乱码 解决IDEA读取txt文本中显示的中文乱码问题

  7. 其实吧,LRU也就那么回事。

    这是why哥的第 81 篇原创文章 你面试的时候遇见过LRU吗? LRU 算法,全称是Least Recently Used. 翻译过来就是最近最少使用算法. 这个算法的思想就是:如果一个数据在最近一 ...

  8. Docker下配置KeepAlive支持nginx高可用

    案例子任务一.安装配置keepalived 步骤1:使用nginx镜像生成nginx-keep镜像 1) 启动nginx容器并进入 docker run -d --privileged nginx / ...

  9. flume集成hdfs(hdfs开启kerberos认证)

    )当 sink 到 hdfs 时: ) 需修改 flume-env.sh 配置,增添 hdfs 依赖库: FLUME_CLASSPATH="/root/TDH-Client/hadoop/h ...

  10. ethernet

    OSI参考模型 简化相关网络操作:提供不同厂商之间的互联 应用层 为应用程序提供服务 HTTP Telnet 表示层 数据格式化,加密.解密 ASCII EBCDIC JPEG 会话层 建立.维护.管 ...