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>

    https://www.houdianzi.com/zslogo/ 中山logo设计

    第三步: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;
    }
    }
  • 相关阅读:
    c++ const的使用
    C++面向对象程序设计举例
    C++构造函数与析构函数的解析
    inline函数和一般的函数有什么不同
    Linux 脚本为什么会有#!
    Linux 基本概念和操作2
    Linux 基本概念和操作
    ubuntu14.0464位 Ros环境 安装halcon13.01
    数据类型之间的连接和运算
    cmd命令 从C盘转到D盘
  • 原文地址:https://www.cnblogs.com/qianxiaox/p/14973990.html
Copyright © 2011-2022 走看看