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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>html2canvas_download</title>
<style> </style>
</head>
<body>
<div id="image" style="width: 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秒或者等等,才可以下载完整图片

html转化为图片下载的更多相关文章

  1. (8)分布式下的爬虫Scrapy应该如何做-图片下载(源码放送)

      转载主注明出处:http://www.cnblogs.com/codefish/p/4968260.html 在爬虫中,我们遇到比较多需求就是文件下载以及图片下载,在其它的语言或者框架中,我们可能 ...

  2. android开源项目:图片下载缓存库picasso

    picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能. picasso有如下特性: 在a ...

  3. 利用aspose-words直接将Word转化为图片

    之前遇到一个需求,需要在word文档中加入一些文字,并转化为图片.之前也试过几种方案,但是发现效果还不是很理想,且中间需要经过一次转化为pdf的过程,最近找到了最理想的方式,即利用aspose-wor ...

  4. html dom 转化成图片踩坑记(canvas toDataURL)

    需求 在开发过程中遇到这么一个需求,h5页面需要将一个html dom转化成图片,便于用户保存. 面向百度搜索第三方得 html2canvas 和 dom-to-image 两者在写这篇笔记之前在gi ...

  5. iOS多图片下载

    iOS多图片下载.在cell里面下载图片.做了缓存优化. (app.icon是图片地址) // 先从内存缓存中取出图片 UIImage *image = self.images[app.icon]; ...

  6. python简易爬虫来实现自动图片下载

    菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...

  7. 根据网址把图片下载到服务器C#代码

    根据网址把图片下载到服务器C#代码 ASPX页面代码: <%@ Page Language="C#" AutoEventWireup="true" Cod ...

  8. .NET破解之图片下载器

    自去年五月加入吾爱后,学习了三个月,对逆向破解产生了深厚的兴趣,尤其是对.NET方面的分析:但由于这一年,项目比较忙,事情比较多,破解这方面又停滞了许久,不知道还要好久. 前些天,帮忙批量下载QQ相册 ...

  9. iOS开发——多线程篇——快速生成沙盒目录的路径,多图片下载的原理、SDWebImage框架的简单介绍

    一.快速生成沙盒目录的路径 沙盒目录的各个文件夹功能 - Documents - 需要保存由"应用程序本身"产生的文件或者数据,例如:游戏进度.涂鸦软件的绘图 - 目录中的文件会被 ...

随机推荐

  1. Java 环境配置 与 碰到的问题

    小白记录,希望各位指点,长期整理修改 不定期更新,碰到的与之相关的会添加,做个小笔记,再次碰到可以更好的解决. JDK 下载:Oracle 配置方法:菜鸟教程 - Java 开发环境配置 作用 JAV ...

  2. JAVA之Mybatis基础入门二 -- 新增、更新、删除

    上一节说了Mybatis的框架搭建和简单查询,这次我们来说一说用Mybatis进行基本的增删改操作: 一. 插入一条数据 1.首先编写USER.XML(表的xml)使用insert元素,元素写在map ...

  3. 入坑Intel OpenVINO:记录一个示例出错的原因和解决方法

    今天试用OpenVINO的例子,在过程中发现了一些其他人没有经历的坑特别记录一下. 出错时候:执行Intel OpenVINO示例的是时候,出错的提示代码: 用于 .NET Framework 的 M ...

  4. ssh 公钥无秘登录问题

    1. 验证服务启动,网络端口连接正常 可以使用nc,telnet,或者密码模式的ssh来验证 2. 验证ssh client端的配置正确 可以尝试登录另外一台主机, 或者本机自校验 3. 验证ssh ...

  5. redis权限认证及登录

    找到配置文件 redis.conf 找到   requirepass 字段 去掉注释,改为  requirepass  yourpassword 重启redis: service redis rest ...

  6. C#压缩文件,C#压缩文件夹,C#获取文件

    using System; using System.Data; using System.Configuration; using System.Collections.Generic; using ...

  7. Linux 系统状态检测命令

    介绍快速查看Linux系统运行状态的能力(网络网卡.系统内核.系统负载.内存使用情况.启用终端数量.历史登录记录.命令执行记录.救援诊断)等命令使用方法 1.ifconfig  用于获取网卡配置和网络 ...

  8. Vue stage3

    <body> <div id="box1"> <div v-bind:class="{ 'active': isActive, 'error ...

  9. [python]关于函数传入参数

    在传入参数时有两个特殊参数,*args,**kwargs,功能如下: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ' ...

  10. 手机控制台调试(需PC端协助)

    工具需求: 1.PC 2.手机(暂时只测试安卓,ios可能是在证书上有区别?) 3.以上两个工具在同一局域网下 步骤:  一 ,PC端登录nodejs官网,选择并下载安装 next,下一步下一步即可( ...