Solved! Go to Solution.
define( [ "dojo/_base/declare", "esri/layers/ArcGISImageServiceLayer" ], function( declare, ArcGISImageServiceLayer ) { var MyImageServiceLayer = declare([ArcGISImageServiceLayer], { declaredClass: "esri.layers.ArcGISImageServiceLayer" }); return MyImageServiceLayer; });
var map, layer; require(["esri/map", "esri/layers/MyImageServiceLayer", "esri/dijit/Print", "dojo/domReady!"], function (Map, MyImageServiceLayer, Print) { esri.config.defaults.io.proxyUrl = "/proxy.ashx";//use your own proxy instead of this. map = new Map("map", { basemap: "gray", center: [-80.85, 35.22], zoom: 14 }); var print = new Print({ map: map, url: "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task" }, "print"); print.startup(); layer = new MyImageServiceLayer("http://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer"); map.addLayer(layer); layer.on("load", function () { layer.renderingRule = { "rasterFunction": "RFTShadedReliefElevationColorRamp" }; layer.renderingRule.toJson = function () { return { "rasterFunction": "RFTShadedReliefElevationColorRamp" }; }; layer.setRenderingRule(layer.renderingRule); }); });
require(["esri/tasks/PrintTask","esri/tasks/PrintParameters","esri/tasks/PrintTemplate","mapui","mainmodel"], function(PrintTask,PrintParameters,PrintTemplate,MapUI,MainModel){ var printConfig = Config.getConfig().print, printTask = new PrintTask(printConfig.url), params = new PrintParameters(), viewModel = MainModel.getVM(); params.map = MapUI.getMap(); params.template = new PrintTemplate(); params.template.label = printConfig.template.label; params.template.format = printConfig.template.format; params.template.layout = printConfig.template.layout; params.template.layoutOptions = printConfig.template.layoutOptions; var languageIsEnglish = (query(".selectedLanguage")[0].id === "languageEnglish"); if(languageIsEnglish) viewModel.printMap("Printing"); else viewModel.printMap("Printing"); printTask.execute(params,function(response){ window.open(response.url); if(languageIsEnglish) viewModel.printMap("Print"); else viewModel.printMap("Cetak"); },function(error){ if(languageIsEnglish) viewModel.printMap("Print"); else viewModel.printMap("Cetak"); }); });
print: { url:"http://gis-stage.wri.org/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task", template: { label:"Map", format:"PNG32", layout:"A4 Landscape", layoutOptions: { titleText: "Suitability Map", authorText: "WRI & esri", copyrightText: "WRI", scalebarUnit: "Miles" } } }
getImageUrl: function (extent, width, height, callback,options) { var _self = this; var bbox = [extent.xmin, extent.ymin, extent.xmax, extent.ymax], params, min, max, tempArray, membership_arguments; var rasterFunction = _self.getRenderingRule(); if (options) { params = options; params['renderingRule'] = JSON.stringify(rasterFunction); params['bbox'] = bbox.join(","); callback(_self.url + "/exportImage?",params); } else { params = { noData: 0, noDataInterpretation: "esriNoDataMatchAny", interpolation: "RSP_BilinearInterpolation", renderingRule: JSON.stringify(rasterFunction), format: "png8", size: width + "," + height, imageSR: 3857, bboxSR: 3857, f: "image", pixelType: 'U8', bbox: bbox.join(",") }; callback(_self.url + "/exportImage?" + dojo.objectToQuery(params)); } },
PrintTask includes renderingRule if that property exists in your layer. Please check yourCustomImageServiceLayer.renderingRule is there, and yourCustomImageServiceLayer.renderingRule.toJson() is a valid function.
"{"rasterFunction":"PalmOilSuitabilityNew","rasterFunctionArguments":{"ElevRaster":"$1","SlopeRaster":"$2","WaterRaster":"$3","ConsRaster":"$4","STypeRaster":"$5","SDepthRaster":"$6","PeatRaster":"$7","SAcidRaster":"$8","SDrainRaster":"$9","RainfallRaster":"$10","LCRaster":"$11","ElevInpR":[0,100,100,1000000],"ElevOutV":[1,0],"SlopeInpR":[0,30,30,1000000],"SlopeOutV":[1,0],"WaterInpR":[0,10,10,1000000],"WaterOutV":[0,1],"ConsInpR":[0,10,10,1000000],"ConsOutV":[0,1],"RainfallInpR":[0,150,150,700,700,1000000],"RainfallOutV":[1,1,0],"SDepthInpR":[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7],"SDepthOutV":[1,0,0,0,1,1,1,1],"PeatInpR":[0,0,1,1,2,2,3,3,4,4,5,5,6,6],"PeatOutV":[1,0,0,0,0,0,0],"SAcidInpR":[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7],"SAcidOutV":[1,1,1,1,1,1,1,1],"SDrainInpR":[0,0,1,1,2,2,3,3,4,4],"SDrainOutV":[1,0,1,1,1],"LCInpR":[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8],"LCOutV":[1,1,1,1,0,0,0,0,0],"STypeInpR":[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10],"STypeOutV":[1,1,1,0,1,1,1,1,1,0]}}"
{ "mapOptions": { "showAttribution": true, "extent": { "xmin": -9002667.410873475, "ymin": 4193183.580948897, "xmax": -8996552.448610498, "ymax": 4195815.881110537, "spatialReference": { "wkid": 102100 } }, "spatialReference": { "wkid": 102100 }, "scale": 18055.954822005082 }, "operationalLayers": [ { "id": "layer0", "title": "layer0", "opacity": 1, "minScale": 591657527.591555, "maxScale": 9027.977411, "url": "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer" }, { "id": "layer2", "title": "layer2", "opacity": 1, "minScale": 0, "maxScale": 0, "url": "http://sampleserver6.arcgisonline.com/arcgis/rest/services/CharlotteLAS/ImageServer", "bandIds": null, "compressionQuality": null, "interpolation": null, "renderingRule": { "rasterFunction": "RFTShadedReliefElevationColorRamp" } }, { "id": "layer1", "title": "layer1", "opacity": 1, "minScale": 591657527.591555, "maxScale": 9027.977411, "url": "http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer" }, { "id": "map_graphics", "minScale": 0, "maxScale": 0, "featureCollection": { "layers": [] } } ], "exportOptions": { "outputSize": [ 800, 1100 ], "dpi": 96 } }
Can you post the web map json sent to print service?
require(["esri/request"], function(request) { request.setRequestPreCallback(function(ioArgs) { // if request is to the PrintingTools url // Get my Image Service Layer from ioArgs.content.Web_Map_as_JSON // Add in my rendering rule and rasterFunctionArguments // replace webmap JSON with updated JSON and request now uses POST instead of GET return ioArgs; }); });