简体   繁体   English

无法通过 html2canvas 下载多个 HTML 元素

[英]unable to download multiple HTML element by html2canvas

I am trying to make a quote download system with div by html2canvas.我正在尝试使用 html2canvas 的 div 制作报价下载系统。 But I have tried to make this system through this process.但是我试图通过这个过程来制作这个系统。 But it is not working.但它不起作用。

Here are the Html multiple elements:以下是 Html 多个元素:

    **First div:**
    <div class="htmltoimage" style="background-color: skyblue;">
        <!-- <img width="100px" src="raj2.jpg"> -->
        <h1>Dhaka</h1>
        <button onclick="downloadimage()" class="clickbtn">Download This</button>
    </div>

    **First div:**
    <div class="htmltoimage" style="background-color: skyblue;">
        <!-- <img width="100px" src="raj2.jpg"> -->
        <h1>Dhaka</h1>
        <button onclick="downloadimage()" class="clickbtn">Download This</button>
    </div>

Here is the html2canvas code:这是 html2canvas 代码:

function downloadimage() {
        var container =  $(this).closest('.htmltoimage');
       
        html2canvas(container, {allowTaint: true}).then(function (canvas) {

            var link = document.createElement("a");
            document.body.appendChild(link);
            link.download = "html_image.jpg";
            link.href = canvas.toDataURL();
            link.target = '_blank';
            link.click();
            
        });
    }

Note: I have included the JQuery file and html2canvas link.注意:我已经包含了 JQuery 文件和 html2canvas 链接。 When someone clicks on the first div to download at this time only this div will be downloaded.当有人点击第一个 div 下载时,此时只会下载这个 div。 So on, and so on, and so on.....以此类推,以此类推,以此类推……

Here's what I tried, You can download whole or one by one upon clicking on each element.这是我尝试过的,您可以单击每个元素下载整个或一个一个。

You need to select all the elements to download and then you can make a bunch download or fire Event Listener to get download one after other.您需要 select 下载所有元素,然后您可以进行一堆下载或触发事件侦听器以逐个下载。

 function download(url) { var a = $("<a style='display:none' id='js-downloder'>").attr("href", url).attr("download", "test.png").appendTo("body"); a[0].click(); a.remove(); } function saveCapture(element) { html2canvas(element).then(function(canvas) { download(canvas.toDataURL("image/png")); }) } var elements = document.querySelectorAll("#capture"); elements.forEach(function(element) { element.addEventListener('click', function() { saveCapture(element); console.log(saveCapture(element)); }) }) //to download all $('#btnDownload').click(function() { var elements = document.querySelectorAll("#capture"); elements.forEach(element => { saveCapture(element); }) })
 @import url('https://fonts.googleapis.com/css?family=Noto+Sans:400,700'); .mainContainer { width: 500px; height: 600px; display: flex; align-items: center; flex-flow: column; gap: 20px; margin: 0 auto; } #capture { margin: 0 auto; width: 100%; height: 100px; overflow: hidden; } textarea { width: 100%; padding: 2rem.5rem; border: 0; text-align: center; color: #fff; background: slateblue; font-family: 'Noto Sans', sans-serif; font-weight: 700; font-size: 2rem; line-height: 1.5; resize: none; max-height: 100%; min-height: 100%; } #btnDownload { background-color: pink; border: none; color: #000; padding: 15px 32px; text-align: center; text-decoration: none; font-size: 16px; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="mainContainer"> <a href="#" class="" id="btnDownload">Download</a> <div id="capture"> <textarea maxlength="110">Click to edit...</textarea> </div> <div id="capture"> <textarea maxlength="110">Click to remove...</textarea> </div> </div>

You can give it a try, it should work.你可以试一试,应该可以的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM