<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic ESRI Printing service not able print ArcGIS JS API 3.33 RasterLayer in ArcGIS Server with JavaScript API Questions</title>
    <link>https://community.esri.com/t5/arcgis-server-with-javascript-api-questions/esri-printing-service-not-able-print-arcgis-js-api/m-p/792471#M255</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am trying to &lt;A href="https://developers.arcgis.com/javascript/3/jsapi/print-amd.html"&gt;Print &lt;/A&gt;map where the layer in the web application is a &lt;A href="https://developers.arcgis.com/javascript/3/jsapi/rasterlayer-amd.html"&gt;RasterLayer&lt;/A&gt;&lt;/P&gt;&lt;P&gt;The slider in the web app mask's the RasterLayer.&lt;/P&gt;&lt;P&gt;I am using ArcGIS JS API 3.33&lt;/P&gt;&lt;P&gt;Following is the code smaple&lt;/P&gt;&lt;P&gt;NOTE: To run the sample you would need to update the printing service URL at line number 127&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;BR /&gt;&amp;lt;html&amp;gt;&lt;BR /&gt;&amp;lt;head&amp;gt;&lt;BR /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&amp;gt;&lt;BR /&gt;&amp;lt;meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"&amp;gt;&lt;BR /&gt;&amp;lt;title&amp;gt;Raster Layer with Pixel Filter&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;link rel="stylesheet" href="https://js.arcgis.com/3.33/dijit/themes/claro/claro.css"&amp;gt;&lt;BR /&gt;&amp;lt;link rel="stylesheet" href="https://js.arcgis.com/3.33/esri/css/esri.css"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;style&amp;gt;&lt;BR /&gt;html, body, #map&lt;BR /&gt;{&lt;BR /&gt; width: 100%;&lt;BR /&gt; height: 100%;&lt;BR /&gt; margin: 0;&lt;BR /&gt; padding: 0;&lt;BR /&gt;}&lt;BR /&gt;#status&lt;BR /&gt;{&lt;BR /&gt; background-color: #000;&lt;BR /&gt; color: #FFF;&lt;BR /&gt; border: solid 1px #FFF;&lt;BR /&gt; -moz-border-radius: 5px;&lt;BR /&gt; -webkit-border-radius: 5px;&lt;BR /&gt; border-radius: 5px;&lt;BR /&gt; padding: 3px;&lt;BR /&gt; position: absolute;&lt;BR /&gt; right: 10px;&lt;BR /&gt; bottom: 10px;&lt;BR /&gt; z-index: 99;&lt;BR /&gt;}&lt;BR /&gt;.shadow&lt;BR /&gt;{&lt;BR /&gt; -moz-border-radius: 6px;&lt;BR /&gt; -webkit-border-radius: 6px;&lt;BR /&gt; border-radius: 6px;&lt;BR /&gt; background-color: #FFF;&lt;BR /&gt; padding: 8px;&lt;BR /&gt;}&lt;BR /&gt;#footer&lt;BR /&gt;{&lt;BR /&gt; height: 90px;&lt;BR /&gt; width: 50%;&lt;BR /&gt; margin: 0 auto;&lt;BR /&gt; padding: 15px;&lt;BR /&gt; position: absolute;&lt;BR /&gt; bottom: 20px;&lt;BR /&gt; left: 20px;&lt;BR /&gt; z-index: 30;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* make all dijit buttons the same width */&lt;BR /&gt; .dijitButton .dijitButtonNode, #drawingWrapper, #printButton {&lt;BR /&gt; width: 160px;&lt;BR /&gt; }&lt;BR /&gt;&amp;lt;/style&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript" src="https://js.arcgis.com/3.33/"&amp;gt;&amp;lt;/script&amp;gt;&lt;BR /&gt;&amp;lt;script&amp;gt;&lt;BR /&gt; require([&lt;BR /&gt; "esri/map",&lt;BR /&gt; &lt;BR /&gt; "esri/domUtils",&lt;BR /&gt; // "dojo/parser",&lt;BR /&gt; // "dojo/dom",&lt;BR /&gt; // "dojo/dom-construct",&lt;BR /&gt; "dojo/on",&lt;BR /&gt; "dijit/registry",&lt;BR /&gt; "esri/layers/RasterLayer",&lt;BR /&gt; "esri/geometry/Extent",&lt;BR /&gt; "esri/SpatialReference",&lt;BR /&gt; "dijit/form/HorizontalSlider",&lt;BR /&gt; "dojox/form/RangeSlider",&lt;BR /&gt; "dijit/form/HorizontalRule",&lt;BR /&gt; "dijit/form/HorizontalRuleLabels",&lt;BR /&gt; "esri/layers/ImageServiceParameters",&lt;BR /&gt; "esri/layers/MosaicRule",&lt;BR /&gt; "esri/layers/RasterFunction",&lt;BR /&gt; "esri/layers/DimensionalDefinition",&lt;/P&gt;&lt;P&gt;"esri/toolbars/draw", "esri/dijit/Print",&lt;BR /&gt; "esri/layers/ArcGISTiledMapServiceLayer", "esri/layers/ArcGISDynamicMapServiceLayer",&lt;BR /&gt; "esri/layers/LayerDrawingOptions",&lt;BR /&gt; "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", &lt;BR /&gt; "esri/symbols/SimpleFillSymbol", "esri/graphic",&lt;BR /&gt; "esri/renderers/ClassBreaksRenderer",&lt;BR /&gt; "esri/config",&lt;BR /&gt; "dojo/_base/array", "esri/Color", "dojo/parser", &lt;BR /&gt; "dojo/query", "dojo/dom", "dojo/dom-construct", &lt;BR /&gt; "dijit/form/CheckBox", "dijit/form/Button",&lt;/P&gt;&lt;P&gt;"dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"&lt;BR /&gt; ], function(&lt;BR /&gt; Map,&lt;/P&gt;&lt;P&gt;domUtils, on, registry, RasterLayer, Extent,&lt;BR /&gt; SpatialReference, HorizontalSlider, RangeSlider, HorizontalRule, HorizontalRuleLabels,&lt;BR /&gt; ImageServiceParameters, MosaicRule, RasterFunction, DimensionalDefinition,&lt;/P&gt;&lt;P&gt;Draw, Print,&lt;BR /&gt; ArcGISTiledMapServiceLayer, ArcGISDynamicMapServiceLayer,&lt;BR /&gt; LayerDrawingOptions,&lt;BR /&gt; SimpleMarkerSymbol, SimpleLineSymbol,&lt;BR /&gt; SimpleFillSymbol, Graphic,&lt;BR /&gt; ClassBreaksRenderer,&lt;BR /&gt; esriConfig,&lt;BR /&gt; arrayUtils, Color, parser, &lt;BR /&gt; query, dom, domConstruct, &lt;BR /&gt; CheckBox, Button&lt;BR /&gt; ) {&lt;BR /&gt; parser.parse();&lt;BR /&gt; var currentMin, currentMax;&lt;BR /&gt; var rasterUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ScientificData/SeaTemperature/ImageServer";&lt;/P&gt;&lt;P&gt;//set up slider&lt;BR /&gt; var slider = registry.byId("pixelSlider");&lt;/P&gt;&lt;P&gt;var initExtent = new Extent(-130, -68, 150, 68, new SpatialReference(4326));&lt;BR /&gt; var map = new Map("map", {&lt;BR /&gt; extent: initExtent,&lt;BR /&gt; basemap: "gray"&lt;BR /&gt; });&lt;/P&gt;&lt;P&gt;var printer = new Print({&lt;BR /&gt; map: map,&lt;BR /&gt; url: "UPDATE_YOUR_PRINTING_SERVICE_URL"&lt;BR /&gt; }, dom.byId("printButton"));&lt;BR /&gt; printer.startup();&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; var sliderMin = -3; //min sea surface temp of -3 deg C&lt;BR /&gt; var sliderMax = 37; //max sea surface temp of 37 deg C&lt;BR /&gt; slider.minimum = sliderMin;&lt;BR /&gt; slider.maximum = sliderMax;&lt;BR /&gt; slider.value = [sliderMin, sliderMax];&lt;/P&gt;&lt;P&gt;// hook up slider events&lt;BR /&gt; slider.on("mouseup", setPixelFilter);&lt;BR /&gt; slider.on("change", setPixelFilter);&lt;/P&gt;&lt;P&gt;//set up slider labels&lt;BR /&gt; var sliderLabels = new HorizontalRuleLabels({&lt;BR /&gt; container: "bottomDecoration",&lt;BR /&gt; labels: [sliderMin.toFixed(0).toString(), sliderMax.toFixed(0).toString()]&lt;BR /&gt; }, domConstruct.create("div", {}, dom.byId("pixelLabels")));&lt;/P&gt;&lt;P&gt;//set up blue to red color ramp inside array&lt;BR /&gt; var colorRamp = [];&lt;BR /&gt; for (var i = 0; i &amp;lt; 256; i++) {&lt;BR /&gt; colorRamp.push( [i, 30, 255 - i] );&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/***************************************************************&lt;BR /&gt; * This image service has multiple dimensions including depth and time.&lt;BR /&gt; * If you are only interested in viewing temperatures at a specific time&lt;BR /&gt; * and at a specific depth, use dimensional definisions&lt;BR /&gt; **************************************************************/&lt;/P&gt;&lt;P&gt;var dim = []; //define dimensional definition as array&lt;BR /&gt; //DEPTH: show only temperatures at sea surface&lt;BR /&gt; dim.push(new DimensionalDefinition({&lt;BR /&gt; variableName: "water_temp",&lt;BR /&gt; dimensionName: "StdZ", //water depth&lt;BR /&gt; values: [0], //sea surface or 0ft&lt;BR /&gt; isSlice: true&lt;BR /&gt; }));&lt;BR /&gt; //TIME: only show temperatures for the week of April 7, 2014&lt;BR /&gt; dim.push(new DimensionalDefinition({&lt;BR /&gt; "variableName": "water_temp",&lt;BR /&gt; "dimensionName": "StdTime", //time temp was recorded&lt;BR /&gt; "values": [1396828800000], //Week of April 7, 2014&lt;BR /&gt; "isSlice": true&lt;BR /&gt; }));&lt;/P&gt;&lt;P&gt;var defaultMosaic = {};&lt;BR /&gt; defaultMosaic.multidimensionalDefinition = dim;&lt;BR /&gt; var params = new ImageServiceParameters();&lt;BR /&gt; params.mosaicRule = new MosaicRule(defaultMosaic);&lt;/P&gt;&lt;P&gt;//the service has a default "Stretched" function and a "None" function, we want original data "None"&lt;BR /&gt; var rf = new RasterFunction();&lt;BR /&gt; rf.functionName = "None";&lt;BR /&gt; params.renderingRule = rf;&lt;/P&gt;&lt;P&gt;//Define the raster layer and add to map&lt;BR /&gt; var rasterLayer = new RasterLayer(rasterUrl, {&lt;BR /&gt; opacity: 1,&lt;BR /&gt; pixelFilter: maskPixels,&lt;BR /&gt; imageServiceParameters: params&lt;BR /&gt; });&lt;BR /&gt; map.addLayer(rasterLayer);&lt;/P&gt;&lt;P&gt;rasterLayer.on("update-start", function () {&lt;BR /&gt; domUtils.show(dom.byId("status"));&lt;BR /&gt; });&lt;BR /&gt; rasterLayer.on("update-end", function () {&lt;BR /&gt; domUtils.hide(dom.byId("status"));&lt;BR /&gt; });&lt;/P&gt;&lt;P&gt;// The pixel filter&lt;BR /&gt; function maskPixels(pixelData) {&lt;BR /&gt; if (pixelData == null || pixelData.pixelBlock == null) {&lt;BR /&gt; return;&lt;BR /&gt; }&lt;BR /&gt; if (currentMin === undefined || currentMax === undefined) {&lt;BR /&gt; setPixelFilter();&lt;BR /&gt; }&lt;BR /&gt; var pixelBlock = pixelData.pixelBlock;&lt;BR /&gt; var pixels = pixelBlock.pixels;&lt;BR /&gt; var mask = pixelBlock.mask;&lt;BR /&gt; var numPixels = pixelBlock.width * pixelBlock.height;&lt;BR /&gt; var minVal = rasterLayer.bands[0].min;&lt;BR /&gt; var maxVal = rasterLayer.bands[0].max;&lt;BR /&gt; var factor = 255.0 / (maxVal - minVal);&lt;BR /&gt; if (pixels == null) {&lt;BR /&gt; return;&lt;BR /&gt; }&lt;BR /&gt; var p1 = pixels[0];&lt;BR /&gt; var pr = new Uint8Array(p1.length); //set up array for red values&lt;BR /&gt; var pg = new Uint8Array(p1.length); //set up array for green values&lt;BR /&gt; var pb = new Uint8Array(p1.length); //set up array for blue values&lt;/P&gt;&lt;P&gt;if (mask == null) {&lt;BR /&gt; mask = new Uint8Array(p1.length); //mask = new Uint8Array(p1.length);&lt;BR /&gt; pixelBlock.mask = mask;&lt;BR /&gt; }&lt;BR /&gt; var p = [];&lt;BR /&gt; //if pixel value lies between slider min and max, display it (set value to 1)&lt;BR /&gt; //if not, don't display it (set the value to 0)&lt;BR /&gt; for (var i = 0; i &amp;lt; numPixels; i++) {&lt;BR /&gt; mask&lt;I&gt; = (p1&lt;I&gt; &amp;gt;= Math.floor(currentMin) &amp;amp;&amp;amp; p1&lt;I&gt; &amp;lt;= Math.floor(currentMax)) ? 1 : 0;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;//apply color based on temperature value of each pixel&lt;BR /&gt; if (mask&lt;I&gt;) {&lt;BR /&gt; p&lt;I&gt; = Math.floor((p1&lt;I&gt; - minVal) * factor);&lt;BR /&gt; pr&lt;I&gt; = colorRamp[p&lt;I&gt;][0]; //red&lt;BR /&gt; pg&lt;I&gt; = colorRamp[p&lt;I&gt;][1]; //green&lt;BR /&gt; pb&lt;I&gt; = colorRamp[p&lt;I&gt;][2]; //blue&lt;BR /&gt; }&lt;BR /&gt; }&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;pixelData.pixelBlock.pixels = [pr, pg, pb]; //assign rgb values to each pixel&lt;BR /&gt; pixelData.pixelBlock.statistics = null;&lt;BR /&gt; pixelData.pixelBlock.pixelType = "U8";&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;//Redraw raster layer and dynamically change text on slider move&lt;BR /&gt; function setPixelFilter() {&lt;BR /&gt; var val = slider.get("value");&lt;BR /&gt; currentMin = Math.floor(val[0]);&lt;BR /&gt; currentMax = Math.floor(val[1]);&lt;BR /&gt; if (val) {&lt;BR /&gt; dom.byId("pixelVal").innerHTML = "Currently displaying locations with sea temperatures from " + currentMin + "°C to " + currentMax + "°C";&lt;BR /&gt; }&lt;BR /&gt; else {&lt;BR /&gt; dom.byId("pixelVal").innerHTML = "Currently displaying all temperatures.";&lt;BR /&gt; }&lt;BR /&gt; rasterLayer.redraw();&lt;BR /&gt; }&lt;BR /&gt;});&lt;BR /&gt;&amp;lt;/script&amp;gt;&lt;BR /&gt;&amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;body class="claro"&amp;gt;&lt;BR /&gt; &amp;lt;div id="map" &amp;gt;&lt;BR /&gt; &amp;lt;div id="printButton"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="status"&amp;gt;&lt;BR /&gt; Loading...&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="footer" class="shadow"&amp;gt;&lt;BR /&gt; &amp;lt;span style='font-weight: 600; font-size: 130%;' id='elevSpan'&amp;gt;Sea Surface Temperature (°C) on April 7, 2014&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;BR /&gt; &amp;lt;div id='pixelVal'&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="pixelSlider" data-dojo-type="dojox/form/HorizontalRangeSlider" data-dojo-props="showButtons:'false', intermediateChanges:'false', slideDuration:'0'"&amp;gt;&lt;BR /&gt; &amp;lt;div data-dojo-type="dijit/form/HorizontalRule"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="pixelLabels"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/body&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/html&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Following is how the app looks like:&lt;IMG alt="" class="jive-emoji image-1 jive-image j-img-original" src="https://community.esri.com/legacyfs/online/506945_app1.png" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The printing result looks like following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="" class="jive-emoji jive-image image-2 j-img-original" src="https://community.esri.com/legacyfs/online/506946_print.png" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Notice the threshold applied for masking values in the web application are not acknowledged by the print service.&lt;/P&gt;&lt;P&gt;Any suggestions would be really helpful.&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 15 Sep 2020 10:21:10 GMT</pubDate>
    <dc:creator>BrentSlone3</dc:creator>
    <dc:date>2020-09-15T10:21:10Z</dc:date>
    <item>
      <title>ESRI Printing service not able print ArcGIS JS API 3.33 RasterLayer</title>
      <link>https://community.esri.com/t5/arcgis-server-with-javascript-api-questions/esri-printing-service-not-able-print-arcgis-js-api/m-p/792471#M255</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am trying to &lt;A href="https://developers.arcgis.com/javascript/3/jsapi/print-amd.html"&gt;Print &lt;/A&gt;map where the layer in the web application is a &lt;A href="https://developers.arcgis.com/javascript/3/jsapi/rasterlayer-amd.html"&gt;RasterLayer&lt;/A&gt;&lt;/P&gt;&lt;P&gt;The slider in the web app mask's the RasterLayer.&lt;/P&gt;&lt;P&gt;I am using ArcGIS JS API 3.33&lt;/P&gt;&lt;P&gt;Following is the code smaple&lt;/P&gt;&lt;P&gt;NOTE: To run the sample you would need to update the printing service URL at line number 127&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;BR /&gt;&amp;lt;html&amp;gt;&lt;BR /&gt;&amp;lt;head&amp;gt;&lt;BR /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&amp;gt;&lt;BR /&gt;&amp;lt;meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"&amp;gt;&lt;BR /&gt;&amp;lt;title&amp;gt;Raster Layer with Pixel Filter&amp;lt;/title&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;link rel="stylesheet" href="https://js.arcgis.com/3.33/dijit/themes/claro/claro.css"&amp;gt;&lt;BR /&gt;&amp;lt;link rel="stylesheet" href="https://js.arcgis.com/3.33/esri/css/esri.css"&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;style&amp;gt;&lt;BR /&gt;html, body, #map&lt;BR /&gt;{&lt;BR /&gt; width: 100%;&lt;BR /&gt; height: 100%;&lt;BR /&gt; margin: 0;&lt;BR /&gt; padding: 0;&lt;BR /&gt;}&lt;BR /&gt;#status&lt;BR /&gt;{&lt;BR /&gt; background-color: #000;&lt;BR /&gt; color: #FFF;&lt;BR /&gt; border: solid 1px #FFF;&lt;BR /&gt; -moz-border-radius: 5px;&lt;BR /&gt; -webkit-border-radius: 5px;&lt;BR /&gt; border-radius: 5px;&lt;BR /&gt; padding: 3px;&lt;BR /&gt; position: absolute;&lt;BR /&gt; right: 10px;&lt;BR /&gt; bottom: 10px;&lt;BR /&gt; z-index: 99;&lt;BR /&gt;}&lt;BR /&gt;.shadow&lt;BR /&gt;{&lt;BR /&gt; -moz-border-radius: 6px;&lt;BR /&gt; -webkit-border-radius: 6px;&lt;BR /&gt; border-radius: 6px;&lt;BR /&gt; background-color: #FFF;&lt;BR /&gt; padding: 8px;&lt;BR /&gt;}&lt;BR /&gt;#footer&lt;BR /&gt;{&lt;BR /&gt; height: 90px;&lt;BR /&gt; width: 50%;&lt;BR /&gt; margin: 0 auto;&lt;BR /&gt; padding: 15px;&lt;BR /&gt; position: absolute;&lt;BR /&gt; bottom: 20px;&lt;BR /&gt; left: 20px;&lt;BR /&gt; z-index: 30;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* make all dijit buttons the same width */&lt;BR /&gt; .dijitButton .dijitButtonNode, #drawingWrapper, #printButton {&lt;BR /&gt; width: 160px;&lt;BR /&gt; }&lt;BR /&gt;&amp;lt;/style&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;script type="text/javascript" src="https://js.arcgis.com/3.33/"&amp;gt;&amp;lt;/script&amp;gt;&lt;BR /&gt;&amp;lt;script&amp;gt;&lt;BR /&gt; require([&lt;BR /&gt; "esri/map",&lt;BR /&gt; &lt;BR /&gt; "esri/domUtils",&lt;BR /&gt; // "dojo/parser",&lt;BR /&gt; // "dojo/dom",&lt;BR /&gt; // "dojo/dom-construct",&lt;BR /&gt; "dojo/on",&lt;BR /&gt; "dijit/registry",&lt;BR /&gt; "esri/layers/RasterLayer",&lt;BR /&gt; "esri/geometry/Extent",&lt;BR /&gt; "esri/SpatialReference",&lt;BR /&gt; "dijit/form/HorizontalSlider",&lt;BR /&gt; "dojox/form/RangeSlider",&lt;BR /&gt; "dijit/form/HorizontalRule",&lt;BR /&gt; "dijit/form/HorizontalRuleLabels",&lt;BR /&gt; "esri/layers/ImageServiceParameters",&lt;BR /&gt; "esri/layers/MosaicRule",&lt;BR /&gt; "esri/layers/RasterFunction",&lt;BR /&gt; "esri/layers/DimensionalDefinition",&lt;/P&gt;&lt;P&gt;"esri/toolbars/draw", "esri/dijit/Print",&lt;BR /&gt; "esri/layers/ArcGISTiledMapServiceLayer", "esri/layers/ArcGISDynamicMapServiceLayer",&lt;BR /&gt; "esri/layers/LayerDrawingOptions",&lt;BR /&gt; "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", &lt;BR /&gt; "esri/symbols/SimpleFillSymbol", "esri/graphic",&lt;BR /&gt; "esri/renderers/ClassBreaksRenderer",&lt;BR /&gt; "esri/config",&lt;BR /&gt; "dojo/_base/array", "esri/Color", "dojo/parser", &lt;BR /&gt; "dojo/query", "dojo/dom", "dojo/dom-construct", &lt;BR /&gt; "dijit/form/CheckBox", "dijit/form/Button",&lt;/P&gt;&lt;P&gt;"dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"&lt;BR /&gt; ], function(&lt;BR /&gt; Map,&lt;/P&gt;&lt;P&gt;domUtils, on, registry, RasterLayer, Extent,&lt;BR /&gt; SpatialReference, HorizontalSlider, RangeSlider, HorizontalRule, HorizontalRuleLabels,&lt;BR /&gt; ImageServiceParameters, MosaicRule, RasterFunction, DimensionalDefinition,&lt;/P&gt;&lt;P&gt;Draw, Print,&lt;BR /&gt; ArcGISTiledMapServiceLayer, ArcGISDynamicMapServiceLayer,&lt;BR /&gt; LayerDrawingOptions,&lt;BR /&gt; SimpleMarkerSymbol, SimpleLineSymbol,&lt;BR /&gt; SimpleFillSymbol, Graphic,&lt;BR /&gt; ClassBreaksRenderer,&lt;BR /&gt; esriConfig,&lt;BR /&gt; arrayUtils, Color, parser, &lt;BR /&gt; query, dom, domConstruct, &lt;BR /&gt; CheckBox, Button&lt;BR /&gt; ) {&lt;BR /&gt; parser.parse();&lt;BR /&gt; var currentMin, currentMax;&lt;BR /&gt; var rasterUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ScientificData/SeaTemperature/ImageServer";&lt;/P&gt;&lt;P&gt;//set up slider&lt;BR /&gt; var slider = registry.byId("pixelSlider");&lt;/P&gt;&lt;P&gt;var initExtent = new Extent(-130, -68, 150, 68, new SpatialReference(4326));&lt;BR /&gt; var map = new Map("map", {&lt;BR /&gt; extent: initExtent,&lt;BR /&gt; basemap: "gray"&lt;BR /&gt; });&lt;/P&gt;&lt;P&gt;var printer = new Print({&lt;BR /&gt; map: map,&lt;BR /&gt; url: "UPDATE_YOUR_PRINTING_SERVICE_URL"&lt;BR /&gt; }, dom.byId("printButton"));&lt;BR /&gt; printer.startup();&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; var sliderMin = -3; //min sea surface temp of -3 deg C&lt;BR /&gt; var sliderMax = 37; //max sea surface temp of 37 deg C&lt;BR /&gt; slider.minimum = sliderMin;&lt;BR /&gt; slider.maximum = sliderMax;&lt;BR /&gt; slider.value = [sliderMin, sliderMax];&lt;/P&gt;&lt;P&gt;// hook up slider events&lt;BR /&gt; slider.on("mouseup", setPixelFilter);&lt;BR /&gt; slider.on("change", setPixelFilter);&lt;/P&gt;&lt;P&gt;//set up slider labels&lt;BR /&gt; var sliderLabels = new HorizontalRuleLabels({&lt;BR /&gt; container: "bottomDecoration",&lt;BR /&gt; labels: [sliderMin.toFixed(0).toString(), sliderMax.toFixed(0).toString()]&lt;BR /&gt; }, domConstruct.create("div", {}, dom.byId("pixelLabels")));&lt;/P&gt;&lt;P&gt;//set up blue to red color ramp inside array&lt;BR /&gt; var colorRamp = [];&lt;BR /&gt; for (var i = 0; i &amp;lt; 256; i++) {&lt;BR /&gt; colorRamp.push( [i, 30, 255 - i] );&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;/***************************************************************&lt;BR /&gt; * This image service has multiple dimensions including depth and time.&lt;BR /&gt; * If you are only interested in viewing temperatures at a specific time&lt;BR /&gt; * and at a specific depth, use dimensional definisions&lt;BR /&gt; **************************************************************/&lt;/P&gt;&lt;P&gt;var dim = []; //define dimensional definition as array&lt;BR /&gt; //DEPTH: show only temperatures at sea surface&lt;BR /&gt; dim.push(new DimensionalDefinition({&lt;BR /&gt; variableName: "water_temp",&lt;BR /&gt; dimensionName: "StdZ", //water depth&lt;BR /&gt; values: [0], //sea surface or 0ft&lt;BR /&gt; isSlice: true&lt;BR /&gt; }));&lt;BR /&gt; //TIME: only show temperatures for the week of April 7, 2014&lt;BR /&gt; dim.push(new DimensionalDefinition({&lt;BR /&gt; "variableName": "water_temp",&lt;BR /&gt; "dimensionName": "StdTime", //time temp was recorded&lt;BR /&gt; "values": [1396828800000], //Week of April 7, 2014&lt;BR /&gt; "isSlice": true&lt;BR /&gt; }));&lt;/P&gt;&lt;P&gt;var defaultMosaic = {};&lt;BR /&gt; defaultMosaic.multidimensionalDefinition = dim;&lt;BR /&gt; var params = new ImageServiceParameters();&lt;BR /&gt; params.mosaicRule = new MosaicRule(defaultMosaic);&lt;/P&gt;&lt;P&gt;//the service has a default "Stretched" function and a "None" function, we want original data "None"&lt;BR /&gt; var rf = new RasterFunction();&lt;BR /&gt; rf.functionName = "None";&lt;BR /&gt; params.renderingRule = rf;&lt;/P&gt;&lt;P&gt;//Define the raster layer and add to map&lt;BR /&gt; var rasterLayer = new RasterLayer(rasterUrl, {&lt;BR /&gt; opacity: 1,&lt;BR /&gt; pixelFilter: maskPixels,&lt;BR /&gt; imageServiceParameters: params&lt;BR /&gt; });&lt;BR /&gt; map.addLayer(rasterLayer);&lt;/P&gt;&lt;P&gt;rasterLayer.on("update-start", function () {&lt;BR /&gt; domUtils.show(dom.byId("status"));&lt;BR /&gt; });&lt;BR /&gt; rasterLayer.on("update-end", function () {&lt;BR /&gt; domUtils.hide(dom.byId("status"));&lt;BR /&gt; });&lt;/P&gt;&lt;P&gt;// The pixel filter&lt;BR /&gt; function maskPixels(pixelData) {&lt;BR /&gt; if (pixelData == null || pixelData.pixelBlock == null) {&lt;BR /&gt; return;&lt;BR /&gt; }&lt;BR /&gt; if (currentMin === undefined || currentMax === undefined) {&lt;BR /&gt; setPixelFilter();&lt;BR /&gt; }&lt;BR /&gt; var pixelBlock = pixelData.pixelBlock;&lt;BR /&gt; var pixels = pixelBlock.pixels;&lt;BR /&gt; var mask = pixelBlock.mask;&lt;BR /&gt; var numPixels = pixelBlock.width * pixelBlock.height;&lt;BR /&gt; var minVal = rasterLayer.bands[0].min;&lt;BR /&gt; var maxVal = rasterLayer.bands[0].max;&lt;BR /&gt; var factor = 255.0 / (maxVal - minVal);&lt;BR /&gt; if (pixels == null) {&lt;BR /&gt; return;&lt;BR /&gt; }&lt;BR /&gt; var p1 = pixels[0];&lt;BR /&gt; var pr = new Uint8Array(p1.length); //set up array for red values&lt;BR /&gt; var pg = new Uint8Array(p1.length); //set up array for green values&lt;BR /&gt; var pb = new Uint8Array(p1.length); //set up array for blue values&lt;/P&gt;&lt;P&gt;if (mask == null) {&lt;BR /&gt; mask = new Uint8Array(p1.length); //mask = new Uint8Array(p1.length);&lt;BR /&gt; pixelBlock.mask = mask;&lt;BR /&gt; }&lt;BR /&gt; var p = [];&lt;BR /&gt; //if pixel value lies between slider min and max, display it (set value to 1)&lt;BR /&gt; //if not, don't display it (set the value to 0)&lt;BR /&gt; for (var i = 0; i &amp;lt; numPixels; i++) {&lt;BR /&gt; mask&lt;I&gt; = (p1&lt;I&gt; &amp;gt;= Math.floor(currentMin) &amp;amp;&amp;amp; p1&lt;I&gt; &amp;lt;= Math.floor(currentMax)) ? 1 : 0;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;//apply color based on temperature value of each pixel&lt;BR /&gt; if (mask&lt;I&gt;) {&lt;BR /&gt; p&lt;I&gt; = Math.floor((p1&lt;I&gt; - minVal) * factor);&lt;BR /&gt; pr&lt;I&gt; = colorRamp[p&lt;I&gt;][0]; //red&lt;BR /&gt; pg&lt;I&gt; = colorRamp[p&lt;I&gt;][1]; //green&lt;BR /&gt; pb&lt;I&gt; = colorRamp[p&lt;I&gt;][2]; //blue&lt;BR /&gt; }&lt;BR /&gt; }&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;pixelData.pixelBlock.pixels = [pr, pg, pb]; //assign rgb values to each pixel&lt;BR /&gt; pixelData.pixelBlock.statistics = null;&lt;BR /&gt; pixelData.pixelBlock.pixelType = "U8";&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;//Redraw raster layer and dynamically change text on slider move&lt;BR /&gt; function setPixelFilter() {&lt;BR /&gt; var val = slider.get("value");&lt;BR /&gt; currentMin = Math.floor(val[0]);&lt;BR /&gt; currentMax = Math.floor(val[1]);&lt;BR /&gt; if (val) {&lt;BR /&gt; dom.byId("pixelVal").innerHTML = "Currently displaying locations with sea temperatures from " + currentMin + "°C to " + currentMax + "°C";&lt;BR /&gt; }&lt;BR /&gt; else {&lt;BR /&gt; dom.byId("pixelVal").innerHTML = "Currently displaying all temperatures.";&lt;BR /&gt; }&lt;BR /&gt; rasterLayer.redraw();&lt;BR /&gt; }&lt;BR /&gt;});&lt;BR /&gt;&amp;lt;/script&amp;gt;&lt;BR /&gt;&amp;lt;/head&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;body class="claro"&amp;gt;&lt;BR /&gt; &amp;lt;div id="map" &amp;gt;&lt;BR /&gt; &amp;lt;div id="printButton"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="status"&amp;gt;&lt;BR /&gt; Loading...&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="footer" class="shadow"&amp;gt;&lt;BR /&gt; &amp;lt;span style='font-weight: 600; font-size: 130%;' id='elevSpan'&amp;gt;Sea Surface Temperature (°C) on April 7, 2014&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;BR /&gt; &amp;lt;div id='pixelVal'&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="pixelSlider" data-dojo-type="dojox/form/HorizontalRangeSlider" data-dojo-props="showButtons:'false', intermediateChanges:'false', slideDuration:'0'"&amp;gt;&lt;BR /&gt; &amp;lt;div data-dojo-type="dijit/form/HorizontalRule"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;div id="pixelLabels"&amp;gt;&amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt; &amp;lt;/div&amp;gt;&lt;BR /&gt;&amp;lt;/body&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;/html&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Following is how the app looks like:&lt;IMG alt="" class="jive-emoji image-1 jive-image j-img-original" src="https://community.esri.com/legacyfs/online/506945_app1.png" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The printing result looks like following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;IMG alt="" class="jive-emoji jive-image image-2 j-img-original" src="https://community.esri.com/legacyfs/online/506946_print.png" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Notice the threshold applied for masking values in the web application are not acknowledged by the print service.&lt;/P&gt;&lt;P&gt;Any suggestions would be really helpful.&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 15 Sep 2020 10:21:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-server-with-javascript-api-questions/esri-printing-service-not-able-print-arcgis-js-api/m-p/792471#M255</guid>
      <dc:creator>BrentSlone3</dc:creator>
      <dc:date>2020-09-15T10:21:10Z</dc:date>
    </item>
  </channel>
</rss>

