前端PDF文件转图片方法

第一步:先下载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;
    }
}
(0)

相关推荐

  • 扩展标准库而不是修改标准库

    有一些用户反馈这个问题时还能保持礼貌,而有一些用户就直接飙脏话对我进行辱骂,仿佛更新标准库 -- 侵犯了他什么神圣的权利. 我今天特别解释一下这个问题: 1.aardio 并没有自动升级的功能,一定是 ...

  • 爬取某位大佬简书上所有文章并保存为pdf

    第一时间获取 Python 技术干货! 阅读文本大概需要 8 分钟. 1 目 标 场 景 现如今,我们处于一个信息碎片化的信息时代,遇到好的文章都有随手收藏的习惯.但过一段时间,当你想要重新查看这篇文 ...

  • 【Python】如何用Python来操作PDF文件,建议收藏

    今天这篇文章,我们不谈热点,毕竟最近谈论的热点有点多了,也有点腻了,我们来讲一些Python运用实践当中的小技巧,用Python来操作和处理PDF文件,通过本篇文章,读者朋友大概会学会 1. 通过Py ...

  • vue实现pdf文档在线预览功能

    vue实现pdf文档在线预览功能 简介 针对android系统不支持pdf文档在线预览,可通过引入pdf.js插件实现,其具体实现步骤如下 一.引入插件 方式一:npm install --save ...

  • 在react中使用react-pdf-js 和 pdfjs-dist的区别和如何使用。以及分页和不分页是怎么处理的

    在react中使用react-pdf-js 和 pdfjs-dist的区别和如何使用。以及分页和不分页是怎么处理的

  • promise的常用情况

    因为js是单线程的,所以一旦代码中有报错,就不会执行下面的了,如下333就未打印 console.log(111) throw Error(222) console.log(333) 好像与promi ...

  • 手把手教你利用JS给图片打马赛克

    Vue中文社区 今天 以下文章来源于掘金开发者社区 ,作者VGtime 掘金开发者社区掘金,一个帮助开发者成长的技术社区 效果演示 Canvas 简介 HTML5 标签用于绘制图像(通过脚本,通常是 ...

  • 字符画生成01

    今天mixlab群里有人问: 网站 https://www.fontke.com/tool/image2ascii/ 上传图片生成字符画,如何把文本转化为图片保存下来. 解决方案是: 1 获取每行的字 ...

  • 如何将图片转换成pdf文件?简单方法这里有,一学就会

    大家好,我是一名大二学生,专业课不是很忙,就报名加入了学生会.最近负责整理一个活动的照片,需要进行调色.p图等操作.我花费了半天时间整理好,批量压缩再转发给对应的负责人后,她叫我同时再传送一份pdf文 ...

  • iPhone用户如何快速将PDF文件转换为图片?

    编注:捷径系列主要面向正在使用苹果生态iPhone.iPad.iPod设备的朋友,分享网络最热最实用的快捷指令(捷径)资源,帮你更高效的完成一些事情. 今天给大家分享捷径资源:PDF转换为图片.可以通 ...

  • 这3种pdf文件缩小的方法你肯定不知道

    哎,在办公的时候,最让人困扰的莫过于"文件内存占比过大"这一情况了.因为,文件过大意味着传送.打开困难,这就会让工作效率变得慢.想要解决这个问题的话,方法不是没有,我们可以使用方法 ...

  • 如何在pdf中添加图片?给pdf文件添加图片的快速教程

    如今,随着办公需求的变化,我们已经越来越离不开pdf文档了,它以高安全性.保真度等特点被很多公司选择为对外的文档格式之一,什么公文.项目方案.计划书都是以pdf形式发给别人的. 不过,在整理pdf文件 ...

  • pdf怎么在线压缩?压缩pdf文件的简单方法

    无论是pdf文件,还是word文档,文件过大就要对它进行压缩.平时上班,大家难免会碰到一些内存过大的pdf文件,不压缩就会出现上传慢.打开慢等情况.为了避免这种情况发生,也是为了节省时间.提高效率,我 ...

  • 怎样把图片转换成pdf文件?这有个简单方法

    平日里,大家接触的文件格式不算少了吧,就好比有pdf.jpg.word.excel.ppt等,其中,pdf文件与图片比较相同,就是用一般的office工具是很难编辑它们内容的.此外,pdf文件还有传阅 ...

  • pdf怎么转换成jpg?把文件转图片的方法步骤

    最近,我遇到了一件让我感到很苦恼的事情:我在一家公司当美工,经常要上网搜罗各种图片素材,把图片给下载到电脑上以后,发现它们都是pdf格式的.这可把我气炸了,这些图片好不容易才找着,但pdf文件又难以编 ...

  • jpg怎么转换成pdf格式?jpg图片转pdf文件的方法步骤

    平时,大家接触到pdf格式文件比较多,经常要把其他文件格式转换成为pdf.例如,为了方便对图片进行整体预览,我们会把图片合并.转换为一份pdf格式文件.这样的话,就方便我们自己传送文件,也方便大家查看 ...

  • 多张图片合成一个pdf文件,怎么把图片变成pdf?

    文件格式之间的转换操作是有非常多的,像word转ppt,word转pdf,ppt转pdf等等,文件格式转换是非常多的.而图片转pdf这种操作也是经常需要的!就好比当我们从网上下载一些图片资料的时候,这 ...