【发布时间】:2014-03-13 20:48:28
【问题描述】:
我在尝试从全屏 OpenLayers Web 制图应用程序创建格式化打印页面时遇到问题。
当我调用打印函数时,我使用 css 样式的 HTML 创建了一个新窗口。我从 OpenLayers 画布中获取 innerHTML 并将内容粘贴到打印页面上的新画布 div 中。
{
var widthPx = document.getElementById('OpenLayers_canvas').offsetWidth;
var heightPX = document.getElementById('OpenLayers_canvas').offsetHeight;
var html =
'<html><head>'
+ '<link rel="stylesheet" href="styles/olStyle_printing.css" type="text/css" />'
+ '</head><body>'
+ '<div id="OpenLayers_printcanvas">'
+ '<div style="width:' + widthPx + 'px;height:' + heightPX + 'px" id="OpenLayers_canvas">'
+ document.getElementById('OpenLayers_canvas').innerHTML
+ '</div>'
+ '</div>'
+ '</body></html>';
var w = window.open();
w.document.write(html);
w.document.close();
w.focus();
w.print();
//w.close();
}
问题是我不知道如何使内容居中。
地图绑定在左上角。我想要做的是让原始地图的中心位于打印页面框架的中心。
编辑: 我添加了一个带边框的容器 div。我可以隐藏溢出。但是,问题是我不知道如何将 div 在其容器中居中。
第一个屏幕截图显示了 OpenLayers 应用程序:
第二个屏幕截图显示了我在容器 div 内的 div 中使用 innerHTML 内容创建的文档。
【问题讨论】:
-
你能发fiddle吗?对调试很有帮助。
-
大概使用“检查元素”,您可以找出白色叠加层击中地图左上角的位置,然后对其进行编码以将整个 div 重新定位到屏幕的左上角(通过给它一个负左上角)。
-
我现在通过使用地图画布宽度的一半减去打印画布宽度的一半来硬编码负顶部和左侧来解决这个问题。我不喜欢硬编码值,但现在必须这样做。
标签: javascript html openlayers