我正在使用GeoServer(2.1.1),GeoWebCache(1.2.6),OpenLayers(2.11),GeoExt开发WebGIS应用程序。我的所有图层都通过GeoWebCache用作wms。任何层的示例定义如下:

 var My_Layer = new OpenLayers.Layer.WMS( "My_Layer",
            "http://my-ip + my-port/geoserver/gwc/service/wms",
            {layers: 'layer-name',transparent: "true",format: "image/png",
             tileSize: new OpenLayers.Size(256,256),
             tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom },
            { isBaseLayer: false, visibility:false} );


到目前为止,一切都很好。但是,当我计划向前推进并尝试实现MapFish Printing模块时,输出的pdf为空白!!!我收到以下错误消息:


java.io.IOException:读取图像时出错(状态= 400)
从........


我搜了很多。根据this的一种选择是将我的层作为TMS层进行访问。但是我不需要静态图像层,而不是GeoServer WMS地图层。

再次找到here的另一个选项是使用OpenLayers.Control.ExportMap()。
但这限制了使用不同的比例,因为我的数据范围太大。结果,如果用户要在整个图层上打印(可能在A0纸上),而该比例在Openlayers div中不完全可见,则以特定比例进行打印,这将无法解决该目的。

所以问题是,如何在不使用TMS或GeoWebCache层的情况下完成此任务?

编辑#1:
抱歉,我不在办公室,迟到了。以下是我的config.yaml文件。我觉得没有错误,可以直接从GeoServer打印我的WMS图层。

dpis: [75, 150, 300]

outputFormats:
  - pdf

scales:
  - 10000
  - 25000
  - 50000
  - 100000

hosts:
  - !localMatch
    dummy: true
  - !ipMatch
    ip: www.camptocamp.org
  - !dnsMatch
    host: labs.metacarta.com
    port: 80
  - !dnsMatch
    host: terraservice.net
    port: 80
  - !dnsMatch
    host: sigma.openplans.org
  - !dnsMatch
    host: demo.mapfish.org

layouts:
  A4 portrait:
    metaData:
      title: 'Arunava TopoMap PDF'
      author: 'Arunava print module'
      subject: 'Map layout'
      keywords: 'map,print'
      creator: 'Arunava'
    mainPage:
      pageSize: A4
      rotation: true
      items:
        - !text
          text: '${mapTitle}  ${now MM.dd.yyyy}'
          fontSize: 20
          spacingAfter: 30
        - !map
          spacingAfter: 30
          width: 440
          height: 600
        - !scalebar
          type: bar
          maxSize: 100
          barBgColor: white
          fontSize: 8
          align: right
        - !text
          font: Helvetica
          fontSize: 9
          align: right
          text: '1:${scale}'
      footer: *commonFooter

  A2 portrait:
    metaData:
      title: 'Arunava TopoMap PDF'
      author: 'Arunava print module'
      subject: 'Map layout'
      keywords: 'map,print'
      creator: 'Arunava'
    mainPage:
      pageSize: A2
      rotation: true
      items:
        - !text
          text: '${mapTitle}  ${now MM.dd.yyyy}'
          fontSize: 20
          spacingAfter: 30
        - !map
          spacingAfter: 30
          width: 880
          height: 1200
        - !scalebar
          type: bar
          maxSize: 100
          barBgColor: white
          fontSize: 8
          align: right
        - !text
          font: Helvetica
          fontSize: 9
          align: right
          text: '1:${scale}'
      footer: *commonFooter

最佳答案

如果不进行进一步调试,则400错误太含糊,无法提供帮助。从经验上,我可以告诉您,在geowebcache服务器不喜欢为您请求的wms层提供服务之前,我已经看到了一个问题。 Mapfish尝试使用不同的图块大小来做奇怪的事情(最终您会得到10%的阈值错误)。您的日志是否显示它正在请求的图像?您能否在我们的浏览器中转到该图块以查看服务器实际在说什么?这就是我最终暴露问题的方式。

为了简化调试,我还创建了一个单独的mapfish日志,以使查找mapfish问题更加容易。使用Geoserver管理员屏幕确定您正在使用哪个日志配置文件,然后在该log4j.properties文件中,为mapfish添加一个单独的文件附加程序,并将所有org.mapfish活动定向到该文件。这使调试更加容易。

最后,我个人的观点:在您的config.yaml中,不要使用outputFormats:[pdf],
相反,请使用以下格式:['pdf']。

即使所有文档都描述了outputFormat(这就是客户端“ spec”中所要求的),但实际的服务器配置仍使用“ formats”变量。我已经提交了补丁程序,以使文档中的内容更加清楚,但在此之前,让我们将此注释作为指导。如果要进入图像输出,这是关键。

09-06 04:54