ArcGIS JS API使用PrintTask打印地图问题解决汇总

环境:来源于工作过程,使用的API是  arcgis js 3.*  3系API,4.*暂时没测试;

1、数据与打印服务跨域情况下,不能打印问题。

一般情况下,我们发布的数据服务和打印服务是在一台服务器上,但业务中经常会调用别家单位的服务,要实现打印怎么办?

解决:通过设置通用代理,arcgis js api提供了基于.NET /JAVA的代理,在proxy.config里面设置好服务的IP即可。

2、打印中文乱码。

这个情况一般都是服务器的打印模板MXD字体默认是ESRI美国的字体,需要更改为中文编码格式,比如:宋体,

修改路径:安装ArcGIS Server的文件夹,\ArcGIS\Server\Templates\ExportWebMapTemplates\,在下面修改要用到的排版样式的字体和排版布局。

3、PictureMarkerSymbol等一些自定义样式,使用自己的图标无法打印出来。

这里由于打印内部代码没有支持自定义图标,所以一般只能显示在GraphicsLayer中,但无法打印出来。

解决:使用arcgis中SimpleMarkerSymbol的默认样式,虽然图标没有那么明确,但可以打印。

4、图例打印出来显示 override。

一般使用graphicsLayer来显示,如果不过滤那么,打印的时候一般都是以override1、override2的形式来显示图例。

这个问题主要就是因为内部自动使用ColorInfo渲染,可以改变渲染方式来实现。

解决:1) 使用renderer代替setSymbol来渲染颜色;2)还一种方式:设置PrintTemplate的LayoutOptions里面参数LegendLayers为服务图层,即不显示GraphicsLayer的图例。

5、打印服务图层,图例均不能显示,比如一个土地利用规划,N个图例都不显示。

一般我们显示图层都是自己设置图层名称,直接使用Layer.id=图层名称 ,来加载设置,不显示图层都没有特别提示,这个问题估计难倒了一大批GIS开发人员,新手熟手都一直没解决。

终于功夫不误有心人,在GeoNet、stackexchange网上终于摸到了一些蛛丝马迹:【LegendLayer.layerId property stands for the assigned ID string of the layer in the map, not in the service.】

意思就是图例图层layerId 要显示的是默认加载到Map中ID(一般是layer1这样的形式),而不是我们给图层指定的图层名称,这个才是真的关键。

解决:对于要加载图例的动态服务、瓦片服务、要素服务,不指定ID=图层名称,默认加载后获取layer.id,然后赋予给LegendLayer.layerId,即能显示图层图例。

ArcGIS JS API使用PrintTask打印地图问题解决汇总

6、图例对一些服务支持的格式不支持,存在漏洞BUG。

Legend images are unsupported for .emf, .gif, .pdf, .svg, .svgz, and .tif image formats. These formats are supported for classic map services (MXD).

上一篇:ArcGIS Server 10.0 安装及使用完整攻略


下一篇:gcc 无法编译c17程序解决办法