你不能。至少不是正式的。不推荐以下概述的步骤。他们使用不属于公共 API 的 ArcGIS JS 库的一部分,因此此行为可能无法在 API 的下一版本中起作用,或者他们可能会对 API 的先前版本进行回补,即使在某些东西上也可能停止工作以前确实有效。
也就是说,有时您现在需要一些“未来”功能,这实际上是使用常见的proxy pattern 获得所需功能的一种非常简单的方法
使用未记录的“私有”函数_getPrintDefinition
var proxy_getPrintDefinition = printTask._getPrintDefinition;
printTask._getPrintDefinition = function() {
var getPrintDefResult = proxy_getPrintDefinition.apply(this, arguments);
//Now you can do what you want with getPrintDefResults
//which should contain the Web_Map_as_JSON
console.log(Json.stringify(getPrintDefResult));
//make sure you return the result or you'll break this print task.
return getPrintDefResult;
}
_getPrintDefinition 将地图作为第一个参数,将 PrintParameters 对象作为第二个参数。
所以你必须创建一个PrintTask,如上所述在新创建的打印任务上重新定义_getPrintDefinition函数,创建一个PrintParameters然后运行:
myPrintTask._getPrintDefinition(myMap,myPrintParameters);
我这个小测试的结果是:
{"mapOptions":{"showAttribution":false,"extent":{"xmin":-7967955.990468411,"ymin":5162705.099750506,"xmax":-7931266.216891576,"ymax":5184470.54355468,
"spatialReference":{"wkid":102100,"latestWkid":3857}},"spatialReference":{"wkid":102100,"latestWkid":3857}},
"operationalLayers":[
{"id":"layer0","title":"layer0","opacity":1,"minScale":591657527.591555,"maxScale":70.5310735,"url":"http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"},
{"id":"XXX-Redacted-XXX","title":"serviceTitle","opacity":1,"minScale":0,"maxScale":0,"token":"XXX-Redacted-XXX","url":"http://XXX-Redacted-XXX/arcgis/rest/services/TestService/MapServer"},
{"id":"XXX-Redacted-XXX","opacity":1,"minScale":0,"maxScale":0,"featureCollection":{"layers":[]}},
{"id":"featureGraphics","opacity":1,"minScale":0,"maxScale":0,"featureCollection":{"layers":[]}},
{"id":"map_graphics","opacity":1,"minScale":0,"maxScale":0,"featureCollection":{"layers":[]}}
]}
如果你不需要对 web 地图 json 做任何操作,只需要输出,那么你甚至不需要使用代理模式。