2013-05-16 3 views
1

пытаюсь работать с печатью с Geoserver geoext/внутр распечатать карту. Мне удалось установить плагин для печати, так как localhost: 8080/geoserver/pdf/info.json? Var = printCapabilities показывает возможности печати. ПРОБЛЕМА: при попытке загрузить страницу с картой и кнопкой печати я получаю эту ошибку:Не удается прочитать свойство «длина» неопределенной (печать карты с GeoServer)

Uncaught TypeError: Cannot read property 'length' of undefined ext-all.js:21 
    Ext.extend.readRecords ext-all.js:21 
    Ext.data.Store.Ext.extend.loadData ext-all.js:21 
    GeoExt.data.PrintProvider.Ext.extend.loadStores PrintProvider.js:548 
    GeoExt.data.PrintProvider.Ext.extend.constructor PrintProvider.js:342 
    (anonymous function) TestPrint.html:22 
    (anonymous function) ext-all.js:21 
    b 

я не могу понять эту проблему, так вот мой TestPrint.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
    <html> 
    <head> 
    <title> 
     A map 
    </title> 
<script src="../ext-3.4.1/adapter/ext/ext-base.js"" type="text/javascript"></script> 
<script src="../ext-3.4.1/ext-all.js" type="text/javascript"></script> 
<link rel="stylesheet" type="text/css" href="../ext-3.4.1/resources/css/ext-all.css"> 
<script src="../openlayers/OpenLayers.js" type="text/javascript"></script> 
<script src="../openlayers/lib/deprecated.js" type="text/javascript"></script> 
<script src="../GeoExt/lib/GeoExt.js" type="text/javascript"></script> 
<link rel="stylesheet" type="text/css" href="../GeoExt/resources/css/geoext-all-debug.css"> 
<script src="http://maps.google.com/maps/api/js?v=3&amp;sensor=false"></script> 

<script type="text/javascript"> 

var mapPanel, printDialog; 

Ext.onReady(function() { 
// The PrintProvider that connects us to the print service 
var printProvider = new GeoExt.data.PrintProvider({ **// this is line 22** 
    method: "GET", // "POST" recommended for production use 
    capabilities: "http://localhost:8080/geoserver/pdf/info.json?var=printCapabilities", // provide url instead for lazy loading 
    customParams: { 
     mapTitle: "GeoExt Printing Demo", 
     comment: "This demo shows how to use GeoExt.PrintMapPanel" 
    } 
}); 

// A MapPanel with a "Print..." button 
mapPanel = new GeoExt.MapPanel({ 
    renderTo: "content", 
    width: 500, 
    height: 350, 
    map: { 
     maxExtent: new OpenLayers.Bounds(
      143.835, -43.648, 
      148.479, -39.574 
     ), 
     maxResolution: 0.018140625, 
     projection: "EPSG:4326", 
     units: 'degrees' 
    }, 
    layers: [new OpenLayers.Layer.WMS("Tasmania State Boundaries", 
     "http://demo.opengeo.org/geoserver/wms", 
     {layers: "topp:tasmania_state_boundaries"}, 
     {singleTile: true, numZoomLevels: 8})], 
    center: [146.56, -41.56], 
    zoom: 0, 
    bbar: [{ 
     text: "Print...", 
     handler: function(){ 
      // A window with the PrintMapPanel, which we can use to adjust 
      // the print extent before creating the pdf. 
      printDialog = new Ext.Window({ 
       title: "Print Preview", 
       layout: "fit", 
       width: 350, 
       autoHeight: true, 
       items: [{ 
        xtype: "gx_printmappanel", 
        sourceMap: mapPanel, 
        printProvider: printProvider 
       }], 
       bbar: [{ 
        text: "Create PDF", 
        handler: function(){ printDialog.items.get(0).print(); } 
       }] 
      }); 
      printDialog.show(); 
     } 
    }] 
}); 

}); 

</script> 
</head> 
<body> 
<div id='content'></div> 
</body> 
</html> 

ответ

0

Если вы проверяете документы, здесь: http://geoext.org/lib/GeoExt/data/PrintProvider.html

это говорит возможности фактический объект, возвращаемый из URL, так что вы, вероятно, может просто дать URL в URL Недвижимость. То есть, изменение линии 24 от:

capabilities: "http://localhost:8080/geoserver/pdf/info.json?var=printCapabilities", // provide url instead for lazy loading 

к:

url: "http://localhost:8080/geoserver/pdf/info.json?var=printCapabilities", // provide url instead for lazy loading 

Нет гарантии, что позволит решить все ваши проблемы, хотя. В противном случае я бы установил точку останова с помощью firebug или около того на строке 22 и отлаживал шаг.

+0

да Крис спасибо он работал, но я до сих пор есть проблемы с кнопкой печати, когда я нажимаю на него я получаю сообщение об ошибке я должен разместить его здесь или задать новый вопрос? –

+0

я есть ошибка в строке 247 в PrintMapPanel.js специально в функции: функцию adjustSize (ширина, высота) вот строка «вар PrintSize = this.printProvider.layout.get („размер“);» ошибка: Uncaught TypeError: не может вызвать метод 'get' из null –

+0

Ну это означает this.printProvider.layout имеет значение null. Пожалуйста, проверьте, что ваши входные параметры соответствуют документации. – Chris

Смежные вопросы