Google Maps API V3打印地图
我正在寻找一种方法来有效地打印使用谷歌地图api v3在网站上实现的谷歌地图。
我见过一些人只使用window.print js然后
@media print { body * { visibility: hidden; } #map * { visibility: visible; } #map {visibility: visible;position:absolute; top: 5px; left: 5px;} }
目前使用fancybox向用户显示更大的地图,我已经为此添加了一个打印按钮。 理想情况下,我只想添加一些jquery或类似的东西来打印地图。
然而,这似乎并没有真正起作用。 有没有人对最佳方法有任何建议
我想通过简单但微妙的DOM操作,你可以获得你的谷歌地图的“快照”(理论上 – 任何地图:))查看器,并在任何浏览器中完美打印。 假设$mapContainer
是地图的主要容器,相关代码是:
// printAnyMaps :: function printAnyMaps() { const $body = $('body'); const $mapContainer = $('.map-container'); const $mapContainerParent = $mapContainer.parent(); const $printContainer = $(''); $printContainer .height($mapContainer.height()) .append($mapContainer) .prependTo($body); const $content = $body .children() .not($printContainer) .not('script') .detach(); /** * Needed for those who use Bootstrap 3.x, because some of * its `@media print` styles ain't play nicely when printing. */ const $patchedStyle = $('
请注意,您可以通过任何打印模板灵活地替换$printContainer
。 这里我只使用一个简单的
作为快照的占位符。
这里的工作代码: http : //jsfiddle.net/glenn/6mx21ted
请注意,如果您还使用Bootstrap,它将为您打破地图打印。 添加此代码:
@media print { img { max-width: auto !important; } }
查看影响谷歌地图的Twitter Bootstrap CSS 。
在HTML中,#Gmap是显示谷歌地图的div,打印按钮一旦点击就会调用函数gmapPrint()。
Print Button
在JavaScript中,gmapPrint()函数读取地图详细信息并将其写入新窗口。 然后打印新窗口。
function gmapPrint() { var content = window.document.getElementById("Gmap"); // get you map details var newWindow = window.open(); // open a new window newWindow.document.write(content.innerHTML); // write the map into the new window newWindow.print(); // print the new window }
您可以使用html2canvas.js将map div转换为canvas元素,然后将其打印为图像。 下面的代码对我来说非常适合:
HTML
JavaScript的
var map = new google.maps.Map(document.getElementById('map'), { zoom: 13, center: defLocation, mapTypeId: 'satellite', streetViewControl: false }); $(document).on('click', '.printBtn', function () { map.setOptions({ mapTypeControl: false, zoomControl: false, streetViewControl: false, panControl: false }); var printWin = window.open('', '', 'width=1000,height=700'); var windowContent = ''; html2canvas($("#map"), { useCORS: true, onrendered: function (canvas) { windowContent += '' windowContent += 'Print canvas '; windowContent += '' windowContent += ''; windowContent += ''; windowContent += ''; printWin.document.open(); printWin.document.write(windowContent); printWin.document.close(); printWin.focus(); setTimeout(function () { printWin.print(); printWin.close(); }, 500); map.setOptions({ mapTypeControl: true, zoomControl: true, streetViewControl: true, panControl: true }); } }); });