尝试找到最好的解决方案,使OpenLayers地图截图使用html2canvas.地图元素丢失css类,图像不被查看
Try find best solution to make OpenLayers map screenshot using html2canvas. The map elements losing css classes, images don't viewed
所以,我知道关于html2canvas与css的坏工作。也许有人能帮我找到最好的解决办法。我需要使地图截图与元素。截图后,我会得到一个图像,看起来很好,但在html中所有元素(面板,按钮)的地图失去所有css类和图像不查看。
所以,我在尝试什么:通过js/jquery重载地图的div;重新加载样式表;把css类从"myFile.css"移到html;
我认为那对我没用。
一旦我试图移动cssText元素的样式属性,它工作得很好,但我认为从div和他的孩子获得和重写所有元素坏主意。
问题是图片是svg,有必要使用XMLSerializer(),我认为有时html2canvas不好与primeFaces的布局工作,所以如果你有css的问题,由importNode修复。为我工作:
//don't forget to declare all js libs and files on html page
//targetElem - id of map, like a $('#map')
function screenshotMap(targetElem) {
var nodesToRecover = [];
var svgElem = targetElem.find('svg');
var serializer = new XMLSerializer();
//screenshotAreaId - north layoutUnit of layout this variable need for
//"update" north layoutUnit
var oldNode = document.getElementById("screenshotAreaId");
//convert all svg's to canvas, filling an arrays for turn back canvas to svg
svgElem.each(function (index, node) {
var parentNode = node.parentNode;
//skip nested svg's in "parent" svg, canvg will handle "parent"
if(parentNode.tagName != 'DIV'){
return true;
}
var canvas = document.createElement('canvas');
var svg = parentNode.querySelector('svg');
var svgString = serializer.serializeToString(svg);
//canvg lib
canvg(canvas, svgString);
nodesToRecover.push({
parent: parentNode,
child: node
});
parentNode.removeChild(node);
parentNode.appendChild(canvas);
});
//html2canvas lib, "screenshot map" download file
html2canvas(targetElem, {
onrendered: function (canvas) {
var img = canvas.toDataURL('image/png').replace("image/png", "image/octet-stream");
window.location.href = img;
//removing canvas, turn back svg's
var canvasElem = targetElem.find('canvas');
canvasElem.each(function (index, node) {
var parentNode = node.parentNode;
parentNode.removeChild(node);
parentNode.appendChild(nodesToRecover[index].child);
});
//"update" layoutUnit if you have problems with css
var newNode = document.importNode(oldNode, true);
document.getElementById("layout").appendChild(newNode);
}
});
}
你会发现画布在这里:https://github.com/gabelerner/canvg
你可以在这里找到html2canvas: http://html2canvas.hertzen.com/
相关文章:
- 在谷歌地图 API 中,不会为 img 元素触发 Onclick 事件
- Android默认浏览器:谷歌地图制作“;位置:相对;元素在页面顶部滚动
- 更改Bing地图元素中的CSS
- 谷歌地图:从地图元素中获取纬度和经度
- 谷歌地图获取点击事件中的sender元素
- 谷歌地图事件-获取点击元素的父级
- d3.js如何为国家地图中的每个州创建一个单独的元素
- 谷歌地图API V3-元素不会隐藏点击事件切换
- 使用HTML元素代替gmap3的地图标记图标
- 带有 d3 的嵌入式 Google 地图.js叠加层显示 UI 选项和叠加元素,但不是地图本身
- 编辑现有的谷歌地图元素
- 谷歌地图API V3 - 元素点击 - 中心地图/打开信息窗口
- 谷歌地图只在iPad上导致不可见的html元素,奇怪的行为为什么
- 在地图的每个元素中连接第一个字母
- 画布平移所有元素,包括小地图
- Google Maps JavaScript API v3 中的空白地图元素
- 将HTML链接添加到谷歌地图圆圈元素
- 有没有一种方法可以散列一个html dom元素,以便在地图中使用
- 用d3.js添加几个地图元素到谷歌地图
- 尝试找到最好的解决方案,使OpenLayers地图截图使用html2canvas.地图元素丢失css类,图像不被查看