JS如何导出Div的内容为图片

最近因为项目需要,研究了几天用js导出页面上的div为图片。项目需求是这样的,一个页面上有统计图和统计表,另外一部分是地图,当用户点击导出报告时,需要将页面内容导出到Excel,统计表可以从后台查出列表,然后以表格形式导出;统计通采用的echarts,可以转换为base64编码,然后后台处理之后导出。但是地图这块就有点难了,首先地图不是一张图片,其次地图的图片不在本地,所以虽然我自己的功能没实现,但是研究出了div导出为图片,需要的就拿走。

div导出为图片,并不是直接完成的,原理可以认为截取屏幕上div大小,然后转换为图片格式。现在有两种方式,首先是将div转换为HTML5的画布,然后画布转换成base64编码,传回后台进行处理;第二种是先把div内容转成svg,然后再转换成base64。

第一种

<html>
    <head>
        <meta name="layout" content="main">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" src="jquery-1.8.3.min.js"></script>
        <script type="text/javascript" src="html2canvas.js"></script>    

        <script  type="text/javascript" >
    $(document).ready( function(){
                $(".button").on("click", function(event) {
                        event.preventDefault();
                        html2canvas(document.getElementById("textArea"), {
                        allowTaint: true,
                        taintTest: false,
                        onrendered: function(canvas) {
                            canvas.id = "mycanvas";
                            //生成base64图片数据
                            var dataUrl = canvas.toDataURL();
                            var newImg = document.createElement("img");
                            newImg.src =  dataUrl;
                            document.body.appendChild(newImg);
                        }
                    });
                });
    });
        </script>
    </head>
    <body>
        <div class="" style="background-color: white;">
            测试图片
        </div>    

        <textArea id="textArea" col="20" rows="10" ></textArea>
        <input class="button" type="button" value="button">测试</input>
    </body>
</html>    

这个方式有要注意的问题,是在canvas.toDataUrl()这个方法,这个方法是把canvas转换成base64码,如果你的div中是图片的话,那么这个方法是执行不成功的。另外,上面提到的导出地图的功能,因为地图是多张图片,同时图片在服务器上,所以涉及到跨域和多张图片信息的问题,这时候也是执行不成功的。

第二种

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript" src="jquery-1.8.3.min.js"></script>
        <script type="text/javascript" src="html2canvas.js"></script>
    </head>
    <body>
    <h2>Output Image:</h2>
        <script>
            function cutDiv(){
                var divContent = document.getElementById("div").innerHTML;
                var data = "data:image/svg+xml," +
                "<svg xmlns=‘http://www.w3.org/2000/svg‘ width=‘200‘ height=‘200‘>" +
                "<foreignObject width=‘100%‘ height=‘100%‘>" +
                "<div xmlns=‘http://www.w3.org/1999/xhtml‘ style=‘font-size:16px;font-family:Helvetica‘>" +
                divContent +
                "</div>" +
                "</foreignObject>" +
                "</svg>";
                var img = new Image();
                img.src = data;
                var canvas = document.createElement("canvas");
                var ctx =  canvas.getContext("2d");
                img.crossOrigin="anonymous";
                img.src = "data:image/svg+xml,<svg xmlns=‘http://www.w3.org/2000/svg‘></svg>";
                ctx.drawImage(img, 0, 0);
                var canvasbase = canvas.toDataURL();
                alert(canvasbase);
            }  

        </script>
        <div id="div">
            <img src="Koala.jpg" style="width:400px;height:300px"/>
        </div>
        <input type="button" value="click" onclick="cutDiv()"/>
    </body>
</html>

  

这种是先把html拼接为svg,然后将组成的svg串赋给一个img的src,然后在画布上画出这个img,最后执行canvas的toDataUrl方法来获得base64码。

这种方式也没能成功导出地图,地图是openlayers做的,本身就是svg,在ctx.drawImage()方法执行时,出现错误,所以没成功。

对于其他比较常用的情况,上面两种转换效果还是蛮好的,如果有用得到的只管拿走;如果上面写的有什么不合适的,请批评指正;另外如果有做过导出地图为图片到word文档的,希望您能不吝赐教,谢谢。

转自:http://blog.csdn.NET/fengyao1995/article/details/51842486

时间: 2024-07-29 22:43:53

JS如何导出Div的内容为图片的相关文章

js如何设置div的背景图片

js如何设置div的背景图片:通过js设置div背景图片的方式有多种,这里只介绍一下使用style方式设置,尽管这种方式大家最为熟悉,但是设置背景因为涉及到路径,可能会稍稍造成一点困难,直接给出代码: odiv.style.backgroundImage="url('images/test.jpg')"; 当然也可以使用setAttribute()函数实现,具体可以参阅setAttribute()函数的用法详解一章节. 原文地址是:http://www.softwhy.com/foru

js 定时更改div背景图片

今天遇到一个业务场景,使用js将一个div标签的背景图片定时更换一下. 之前百度了几个,有css+js,也有css3的,不过css3的兼容有问题,之后同事提示,可以使用js直接来更换div的北京图片,不使用css+ul+il的形式. 推荐的阅读https://blog.csdn.net/woyizhidouzai0505/article/details/41176565?utm_source=blogxgwz1 这个博客写的很好,用的也是这个方法. 下面写两种情况: 第一种是先规定几张图片,随机

js在一个可编辑的div光标处插入图片或者文本(兼容ie,火狐等浏览器)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

让2个并列的div根据内容自动保持同等高度js

有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到“如果右块高度比左块低,会不会导致左块的内容被溢出不显示之类的问题.应该是取左右2者的最高值吧来对齐吧”. 的确应该是哪个div Height值大,就将其值赋给Height值小的div,从而使2个div高度始终保持一致. function $(id){ return document.getElementById(id) } function

js jquery jquery.wordexport.js 实现导出word

由于工作需要,将一个页面导出word文档,主要是简历!经过百度搜索之后,没找到结果,无奈之下只能求助Google,意外发现jquery一款插件可以实现这个功能!而且效果还算可以! 基本可以实现想要的功能! 首先需要的js文件如下,贴出github地址,大家自由下载! https://github.com/eligrey/FileSaver.js/ https://github.com/markswindoll/jQuery-Word-Export 首先你要引入jquery 和FileSaver.

原生js实现tab选项卡里内嵌图片滚动特效代码

<!DOCTYPE HTML><html lang="en-US"><head><meta charset="UTF-8"><title>原生js实现tab选项卡里内嵌图片滚动特效代码</title><meta name="keywords" content="原生js实现tab选项卡里内嵌图片滚动特效代码" /><meta name=&

js实现的div拖动效果实例代码

js实现的div拖动效果实例代码:div的拖动效果在很多效果中都有应用,当然还有很多附加的功能,本章节只是给拖动效果,并介绍一下它的实现过程.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <t

一款在论坛上看到的JS封装的随机过渡方式的图片切换效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

JS及JQuery对Html内容编码,Html转义

/** JQuery Html Encoding.Decoding * 原理是利用JQuery自带的html()和text()函数可以转义Html字符 * 虚拟一个Div通过赋值和取值来得到想要的Html编码或者解码 */ <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> //Ht