兼容ie9及以上的截图(基于html2canvas.js)

在公司项目中大胆使用了html5开发,但是偏偏要求兼容ie8以上浏览器,这里不得不骂一句狗日的ie。查了很多资料,发现只有ie9及以上才兼容html2canvas.js,所以我到现在也不知道兼容ie8的截图功能怎么做,若有哪位大神看到帖子,能帮帮忙,小弟感激不尽!!!话不多说,代码贴起。

1、需要导入的js包:jquery-3.2.1.min.js,html2canvas.js,bluebird.js,excanvas.compiled.js
需要的包都放在下面这个链接里了,bluebird.js是为了让ie兼容Promise 对象。
链接: https://pan.baidu.com/s/1h86jSmyTiQcIkfN8100DqQ 密码:agzy
2、前端代码

<meta name="layout" content="main"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="../js/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="../js/html2canvas.js"></script> <script type="text/javascript" src="../js/bluebird.js"></script> <!--[if IE]> <script type="text/javascript" src="../js/html5shiv.min.js"></script> <script type="text/javascript" src="../js/respond.min.js"></script> <script type="text/javascript" src="../js/excanvas.compiled.js"></script> <![endif]--> <script type="text/javascript" > function download(){ var oDiv = document.getElementById('pdfDiv'); var width = oDiv.offsetWidth; var height = oDiv.offsetHeight; var canvas = document.createElement("canvas"); var scale = 2; canvas.width = width*scale; canvas.height = height*scale; canvas.getContext("2d").scale(scale,scale); var opts = { allowTaint:false, scale:scale, canvas:canvas, width:width, height:height, useCORS:true var oDivClone = $("#pdfDiv").clone(); var screenDiv = document.createElement("div"); screenDiv.style.cssText = "z-index: -9999;left: 0px;top: 0px;"; $("body").append($(screenDiv)); $(screenDiv).append($(oDivClone)); html2canvas(oDivClone[0],opts).then(function(canvas){ var context = canvas.getContext("2d"); context.mozImageSmoothingEnabled = false; context.webkitImageSmoothingEnabled = false; context.msImageSmoothingEnabled = false; context.imageSmoothingEnabled = false; var dataUrl = canvas.toDataURL(); if (window.navigator.msSaveOrOpenBlob) { var blob = canvas.msToBlob(); window.navigator.msSaveBlob(blob,'a.png') }else{ var a = document.createElement('a') a.href = dataUrl a.setAttribute('download', 'a.png') a.click() $(screenDiv).remove(); </script> </head> <img id="imgScrd" /> Hello! <div id="pdfDiv" class="" style="background-color: #abc;"> 计算机天堂测试html5页面截图 <br>jsjtt.com <textArea id="textArea" col="20" rows="10" ></textArea> <input class="example1" type="button" onclick="download();" value="button"> 生成界面如下: <div id="ddd" ></div> <span id="sss"></span> </body> </html>

注: html2canvas的参数是dom节点,所以若用jQuery对象需要转成 dom节点 。若是直接对目标区域截图,当目标的左边,上面有空隙的话,会把空白处也截下;并且还有一种情况,是目标区域是由 滚动条 的,会导致截图不完整。所以我把 目标区域clone一份到一个div中,并且绝对位置,左边上面空白设置为0px,使正确截图到目标区域
需要注意的是,有些时候截图打开是空白的,此时,你加大width和height,便可以截到。 这点我也纳闷了,不知道为啥。

2、目标区域中有自动换行的部分(word-wrap:break-word),在canvas中是不支持的,那我们怎么操作呢?中文的自动换行是可以的,但一长串的英文或者特殊字符字符串就不行了。我能想到的方法是 手动截取,没隔多少位插入
强行换行。

3、这时候我来讨论下兼容性问题,亲测,以上代码在谷歌、ie10以上都是可以的。ie9可以截到图,得到base64代码,但不能用以上两种方法下载到本地了。头大,想了很多办法都不行。看来光靠前端是不行的了,只能去后台转一圈了。把得到的base64代码传到后台,通过java代码解码转换为二进制文件流传到前台下载。

public static boolean Base64ToImage(String imgStr,String imgFilePath) { // 对字节数组字符串进行Base64解码并生成图片 if (StringUtil.isEmpty(imgStr)) // 图像数据为空 return false; BASE64Decoder decoder = new BASE64Decoder(); try { // Base64解码 byte[] b = decoder.decodeBuffer(imgStr); for (int i = 0; i < b.length; ++i) { if (b[i] < 0) {// 调整异常数据 b[i] += 256; OutputStream out = new FileOutputStream(imgFilePath); out.write(b); out.flush(); out.close(); return true; } catch (Exception e) { return false; 兼容ie9及以上的截图(基于html2canvas.js)在公司项目中大胆使用了html5开发,但是偏偏要求兼容ie8以上浏览器,这里不得不骂一句狗日的ie。查了很多资料,发现只有ie9及以上才兼容html2canvas.js,所以我到现在也不知道兼容ie8的截图功能怎么做,若有哪位大神看到帖子,能帮帮忙,小弟感激不尽!!!话不多说,代码贴起。1、需要导入的js包:jquery-3.2.1.m... // jq 页面必备 必须引入元素嘛 <script src="./jquery-3.4.1.min. js "></script> // bluebird 其实用得比较经常 babel es6 转es5 的一个插件 <script src="./bluebird. js "></script> // html 2 canvas 我们核心插件
请在这里查看示例 ☞ bluebird示例前言 ES6 Promise 对象浏览器支持情况如下: 所以如果要用 Promise 的话,还是建议引用 bluebird. js 以下是我在 IE8 中测试示例 : 使用原生 Promise,报错 引用 bluebird. js 后,正常运行 如果有不明白,可以先了解以下教程 Promise 大白话讲解Promise(一) - 需要熟悉 大白话讲解Pro
之前是引用vue-qr。发现ie里会报错,后改成 html 2 Canvas . 1、首先是安装引用 html 2 Canvas canvas 。百度很多 2、先把要 的东西线放在容器里,然后 取 let that = this //创建一个新的 canvas var canvas 2 = document.createElement(" canvas "); _ canvas = this.$refs.imageWrapper; var w = parse
1.将导出的 html 元素的背景设置为白色background-color: white; 2. html 2 canvas 函数绘制时传入参数background: "#FFF", html 2 canvas ($("#" + id), { allowTaint: false, scsle: 2,
### 回答1: html 2 canvas . js 是一种JavaScript库,可以将网页区域转换成 片,并且可以保存为PNG格式或者JPEG格式。其主要应用场景在于将网页上的一段内容,比如高清 、数据统计 表等转换成 片,非常适用于一些需要 的业务场景。 该插件的下载连结可以从GitHub主页(http://github.com/niklasvh/ html 2 canvas )和npm网站(http://npm js .com/package/ html 2 canvas )获取。在下载和集成使用该插件的过程中,需要注意一些事项。 首先,需要理解该插件对于浏览器的依赖性。该插件支持Chrome、Firefox、Safari、IE9+等主流浏览器,但并不支持在移动设备上使用。同时,如果您在调用该插件时,发现出现了某些问题,可以尝试更新浏览器版本或者是查看该插件在GitHub上的issue列表,看是否有其他用户已经遇到并解决了该问题。 其次,下载并引入该插件后,需要了解该插件的使用方法和相关API。该插件有许多自定义参数,比如 的格式、生成的 片的质量、是否忽略某些元素等等。在使用该插件时,应该按需求进行参数配置,提高 效果和生成 片的性能。 最后,在使用该插件过程中,需要注意对用户隐私的保护。如果您使用该插件进行 屏操作,应该明确告知用户您需要对其网页进行 屏,避免违反用户隐私的规定。同时,为了防止 屏操作被滥用,建议配置相关权限,避免插件被恶意利用。 ### 回答2: html 2 canvas . js 是一个JavaScript库,用来将网页中的元素转换成 canvas 像。这个库能够生成高质量、可编辑的 canvas 像,这对于网站设计师和开发者来说是非常有用的。 html 2 canvas . js 库非常易用,代码精简,同时支持各种浏览器和操作系统。 html 2 canvas . js 库的下载非常方便,可以从Github官网或者其他源代码库中下载。下载下来的文件是一个JavaScript库文件,可以被集成到任何网站中。该库只需要与 html 和JavaScript代码一起使用,就能够将网页元素快速转换成 canvas 像。 html 2 canvas . js 库的使用方法非常简单,只需要在JavaScript代码中引入库,并调用相关函数即可。在转换时,可以指定需要转换的dom元素,也可以只转换某个区域内的元素。同时,该库还支持设置转换后的 像大小、背景色、文本字体、压缩质量等选项。 作为一款专门用来生成 canvas 像的JavaScript库, html 2 canvas . js 的应用领域非常广泛。它可以被用于网站 片生成、数据可视化、广告渲染等。同时,该库还可以用来实现网站 片压缩和生成缩略 等功能。 总之, html 2 canvas . js 是一个功能强大、易用性高的JavaScript库,它为网站设计师和开发者提供了非常有用的工具,能够让网站更加具有创意和互动性。如果你正在进行网站开发或者设计,那么 html 2 canvas . js 是一个不可错过的库。 ### 回答3: HTML 2 Canvas 是一个JavaScript库,它允许在客户端端将 HTML 文档渲染成 canvas 。如果您想在应用程序中捕捉网页内容并将其导出为 像格式,这个库非常有用。 HTML 2 Canvas 可以捕捉DOM中的任何可见元素(包括位于窗口之外的部分)、 像、文字和样式,并生成类似于 像。 要下载 HTML 2 Canvas ,第一步是到github上找到它的源代码。地址为https://github.com/niklasvh/ html 2 canvas 。这里您可以访问该项目的文档,并按照说明安装它。该项目提供了完整的JavaScript库,可以从页面上下载或使用npm等包管理器下载。在下载源代码后,在 HTML 文件中引用 HTML 2 Canvas 库文件,做到如下: <script src = "/path/to/ html 2 canvas .min. js "></script> 接下来,就可以使用 HTML 2 Canvas 提供的API将DOM元素渲染成 canvas 对象。一旦捕捉了可见的DOM元素,您可以导出 像到PNG、JPEG和其他流行格式中。 HTML 2 Canvas 库还允许您设置导出 像的大小、缩放比例和其他属性。 HTML 2 Canvas 是一个强大的工具,可以方便地在您的应用程序或网站中实现 功能。无论您是开发一个 像编辑应用程序,还是需要捕捉用户范例, HTML 2 Canvas 库都是值得研究的一款工具。使用 HTML 2 Canvas 将DOM元素转换为可编辑的 像,您可以将任何网页内容转换为易于编辑和共享的格式。