你不能这样做,至少官方不支持。下面列出的步骤并不推荐使用。它们使用了ArcGIS JS库的一部分,该部分不属于公共API,因此此行为在API的下一个版本中可能无法工作,或者他们可能会回退到API的先前版本,并且这可能会停止在以前能够正常工作的东西上正常工作。
话虽如此,有时候你需要现在就需要一些“未来”的功能,而使用常见的代理模式是实现目标的一种相当简单的方式。
使用未记录的“私有”函数 _getPrintDefinition
var proxy_getPrintDefinition = printTask._getPrintDefinition;
printTask._getPrintDefinition = function() {
var getPrintDefResult = proxy_getPrintDefinition.apply(this, arguments);
console.log(Json.stringify(getPrintDefResult));
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执行任何操作,只需要输出结果,则甚至不需要使用代理模式。