zoukankan      html  css  js  c++  java
  • 前端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;
        }
    }

    转载于: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

  • 相关阅读:
    OK335xS-Android mkmmc-android-ubifs.sh hacking
    OK335xS-Android pack-ubi-256M.sh hacking
    OK335xS Ubuntu 12.04.1 版本 Android 开发环境搭建
    Qt Quick Hello World hacking
    Qt QML referenceexamples attached Demo hacking
    QT 5.4.1 for Android Ubuntu QtWebView Demo
    I.MX6 working note for high efficiency
    QT 5.4.1 for Android Windows环境搭建
    mkbootimg hacking
    Generate And Play A Tone In Android hacking
  • 原文地址:https://www.cnblogs.com/smileZAZ/p/13927226.html
Copyright © 2011-2022 走看看