• html转化为图片下载


    务需求:按照客户要求把排课表转化为图片下载到本地。一个月到排课有很多。所以图片会很大

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>html2canvas_download</title>
        <style>
    
        </style>
    </head>
    <body>
    <div id="image" style=" 300px; height: 300px; margin: 10px; background: red; border: 5px solid gray;">
        <h1>hello world!</h1>
        <h3>内容超级多,高度可能是一万多像素</h3>
    </div>
    <div id="imageExport">down</div>
    
    </body>
    <!--<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js"></script>-->
    <script src="/canvastohtml/canvasToHtml.js"></script>
    <script type="text/javascript">
        $("#imageExport").click(function () {
            initExportImage();
        });
    
    
        function initExportImage() {
            //要导出的html的内容
            var oDiv = document.getElementById('image');
            html2canvas(oDiv).then(function (canvas) {
    
    
              /* 1. 创建要导出的html的容器
                let htmlElement = document.createElement('div');
                htmlElement.id = 'imageExportDiv';
                htmlElement.style.display = 'none';
                document.body.appendChild(htmlElement);
    
                //把要导出的html转化为canvas,然后渲染到容器中,实际导出的图片就是我的容器中的canvas
                document.getElementById("imageExportDiv").appendChild(canvas);
                */

    /* var strDataURI = canvas.toDataURL('image/jpeg',0.1);//调小就可以了.图片太大总是发生网络错误的问题 downLoadFn(strDataURI);*/
    /*2。下载图片,图片的大小比较小 推荐使用*/ downloadFile(canvas.toDataURL('image/png',1),"aa.png") }); } /*解码后转化为blob使用,可以把base64的大文件变为小文件,下载就不会出现错误了*/ function downloadFile(content, fileName) { //下载base64图片 var base64ToBlob = function(code) { let parts = code.split(';base64,'); let contentType = parts[0].split(':')[1]; let raw = window.atob(parts[1]); let rawLength = raw.length; let uInt8Array = new Uint8Array(rawLength); for(let i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array], { type: contentType }); }; let aLink = document.createElement('a'); let blob = base64ToBlob(content); //new Blob([content]); let evt = document.createEvent("HTMLEvents"); evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为 aLink.download = fileName; aLink.href = URL.createObjectURL(blob); //aLink.click();
            aLink.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));//兼容火狐
    }; 


    function downLoadFn(url) { if (myBrowser() === "IE" || myBrowser() === "Edge") { SaveAs5(url); } else { download(url); } } //判断浏览器类型 function myBrowser() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = userAgent.indexOf("Opera") > -1; if (isOpera) { return "Opera" } ; //判断是否Opera浏览器 if (userAgent.indexOf("Firefox") > -1) { return "FF"; } //判断是否Firefox浏览器 if (userAgent.indexOf("Chrome") > -1) { return "Chrome"; } if (userAgent.indexOf("Safari") > -1) { return "Safari"; } //判断是否Safari浏览器 if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera) { return "IE"; } ; //判断是否IE浏览器 if (userAgent.indexOf("Trident") > -1) { return "Edge"; } //判断是否Edge浏览器 } //IE浏览器图片保存本地 function SaveAs5(imgURL) { var oPop = window.open(imgURL, "", "width=1, height=1, top=5000, left=5000"); for (; oPop.document.readyState != "complete";) { if (oPop.document.readyState == "complete") break; } oPop.document.execCommand("SaveAs"); oPop.close(); } // chrome14+,firefox20+,pera15+,Edge 13+,Safari未实现 function download(strDataURI) { //创建一个下载的a标签 var link = document.createElement('a'); //设置a标签的文字<a>下载</a> link.innerHTML = '导出'; //下载的图片的名称 link.download = 'coursePlan.png'; link.id = 'aa'; //a标签的点击事件 link.addEventListener('click', function (ev) { link.href = strDataURI; }, false); //$("#imageExport").html(link);//可以把创建的a标签放到指定的标签中 //直接下载,文件图片太大会出现问题,出现网络问题,下载出错 link.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window}));//兼容火狐 //link.click();//直接点击也可 }; </script> </html>

    ps:使用时候出现的问题

    粉色部分代码使用暂时没有遇到问题

    绿色部分使用会出现问题,如果转换下载的图片 71M  使用了base64的图片下载,下载的图片就很大,具体原因未知。每次都会出现问题,下不下来。

    下载失败 网络问题

    图片有时候下载出来,底部的一部分数据会消失

    这个问题是因为图片太大还没有渲染完,如果想要下载完成的图片,需要拉动滑动条,看到完成的图片,然后等等不要页面加载完,就下载,需要等一会10秒或者等等,才可以下载完整图片

  • 相关阅读:
    iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆
    统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)
    Android protectionLevel
    nmon for linux
    UFT 小技巧
    adb测试使用相关
    Java 反射
    Android USB安全调试
    android.process.acore和system进程
    Android 屏幕截图
  • 原文地址:https://www.cnblogs.com/renjianjun/p/10650729.html
Copyright © 2020-2023  润新知