使用innerHTML打印OpenLayers

时间:2014-03-06 17:02:42

标签: javascript html openlayers

尝试从全屏 OpenLayers 网络地图应用程序创建格式化的打印页面时遇到问题。

当我调用我的print函数时,我使用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应用:

enter image description here

第二个屏幕截图显示了我在容器div中的div中使用innerHTML内容创建的文档。

enter image description here

1 个答案:

答案 0 :(得分:0)

我相信您的问题在于,如果您使用innerHTML,则不会执行任何其他操作,只需发送您之前在页面中发送的相同请求即可。如果您想显示其他内容,则必须更改请求。

工作流程应该是:

  1. 更改地图视图,居中到您想要的多边形
  2. 将此视图发送到打印对象的innerHTML
  3. 在更改地图视图的特征之前返回上一个视图
  4. 第二个机会是在您的打印对象中创建新的地图视图,您可以根据打印功能的边界设置地图的边界。

    或者你可以试试这个: Openlayers Print Function

    或者这个(对地图服务器的新请求): http://trac.osgeo.org/openlayers/wiki/Printing