Brian,
Your error was in the layer id portion of your legend layer class. I removed your mixture of Legacy and AMD coding styles:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
<link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.18/dijit/themes/claro/claro.css">
<link rel="stylesheet" type="text/css" href="https://js.arcgis.com/3.18/esri/css/esri.css">
<style type="text/css">
html,
body {
height: 100%;
width: 100%;
font-family: helvetica, arial, sans-serif;
font-size: 90%;
}
#mapLeft {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
position: absolute;
z-index: 0;
}
h3 {
margin: 0 0 5px 0;
border-bottom: 1px solid #444;
padding: 0 0 5px 0;
text-align: center;
}
.shadow {
-moz-box-shadow: 0 0 5px #888;
-webkit-box-shadow: 0 0 5px #888;
box-shadow: 0 0 5px #888;
}
#feedback {
background: #fff;
border: 2px solid #666;
border-radius: 5px;
bottom: 20px;
color: #666;
font-family: arial;
height: auto;
left: 20px;
margin: 5px;
padding: 10px;
position: absolute;
width: 300px;
z-index: 40;
visibility: visible;
}
#feedback a {
color: #666;
text-decoration: none;
}
#feedback a:hover,
#feedback a:active,
#feedback a:visited {
border: none;
color: #666;
text-decoration: none;
}
#note {
padding: 0 0 10px 0;
}
#info,
#information {
padding: 10px 0 0 0;
}
#showTools {
height: 20px;
width: 20px;
position: absolute;
top: 200px;
left: 20px;
z-index: 50;
padding: 5px 6px 5px 6px;
background-color: #f9f8f8;
border-radius: 5px;
visibility: visible;
}
#hideTools {
height: 20px;
width: 20px;
position: absolute;
top: 200px;
left: 20px;
z-index: 50;
padding: 5px 6px 5px 6px;
background-color: #f9f8f8;
border-radius: 5px;
visibility: hidden;
}
#printer {
height: 20px;
width: 20px;
position: absolute;
top: 240px;
left: 20px;
z-index: 50;
padding: 5px 6px 5px 6px;
background-color: #f9f8f8;
border-radius: 5px;
visibility: visible;
}
#content {
position: fixed;
width: 100%;
height: 97%;
border: 1px solid black;
}
#mapLeft {
float: left;
width: 70%;
height: 98%;
border: 1px black solid;
margin-left: 6px;
margin-top: 6px;
}
#map {
float: left;
width: 70%;
height: 98%;
border: 1px black solid;
margin-left: 6px;
margin-top: 6px;
}
#mapRight {
float: right;
border-left: 1px black solid;
width: 29%;
height: 100%;
vertical-align: top;
}
div #legendDiv {
-webkit-column-count: 2;
-moz-column-count: 2;
column-count: 1;
}
.esriLegendServiceLabel {
display: none;
margin: 0;
padding: 0;
}
.esriLegendLayerLabel {
font-weight: bold;
font-size: 12px;
margin: 0;
}
.esriLegendLayer {
padding-left: 20px;
}
td {
font-size: 10px;
font-family: Tahoma;
}
.mapLegendHeader {
font-size: 12px;
font-family: Tahoma;
font-weight: bold;
text-decoration: underline;
}
.mapLayerHeader {
font-size: 10px;
font-family: Tahoma;
font-weight: bold;
margin-left: 10px;
}
.mapSubLayerHeader {
font-size: 10px;
font-family: Tahoma;
font-weight: normal;
margin-left: 10px;
}
.esriScalebarMetricLine {
box-shadow: 1px 1px 1px #888888;
}
.esriScalebarRuler {
box-shadow: 1px 1px 1px #888888;
}
.mapImageLayer {
position: absolute;
top: 85%;
left: 2%;
}
</style>
<title> by befoley</title>
<script src="https://js.arcgis.com/3.18/"></script>
<script type='text/javascript'>
var app = {};
require([
"esri/map", "esri/config", "esri/tasks/PrintTask", "esri/tasks/PrintParameters", "esri/geometry/Extent",
"esri/layers/ArcGISDynamicMapServiceLayer", "esri/layers/ArcGISTiledMapServiceLayer", "esri/layers/FeatureLayer",
"esri/tasks/GeometryService", "esri/tasks/PrintTemplate", "dojo/_base/array", "dojo/dom", "dojo/on", "dojo/parser",
"esri/tasks/LegendLayer", "esri/request", "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"
],function(
Map, esriConfig, PrintTask, PrintParameters, Extent,
ArcGISDynamicMapServiceLayer, ArcGISTiledMapServiceLayer, FeatureLayer,
GeometryService, PrintTemplate, arrayUtils, dom, on, parser,
LegendLayer, Request
) {
parser.parse();
var initialExtent = new Extent({
xmin: -13133567.66,
ymin: 3996227.94,
xmax: -13031753.54,
ymax: 4087952.37,
"spatialReference": {
"wkid": 102100
}
});
var map = new esri.Map("mapLeft", {
basemap: "streets",
extent: initialExtent,
zoom: 10
});
var fireLayer = new ArcGISDynamicMapServiceLayer("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/MapServer", {
id: 'fire'
});
map.addLayers([fireLayer]);
getLegendJSON();
app.printUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%...";
function createPrintTask(printTitle) {
var template = new PrintTemplate();
template.layout = "A4 Landscape";
template.label = "Landscape (PDF)";
template.format = "pdf";
var legendLayer = new LegendLayer();
legendLayer.layerId = fireLayer.id;
legendLayer.subLayerIds = [0, 1, 2];
template.layoutOptions = {
legendLayers: [legendLayer],
scalebarUnit: "Miles",
titleText: printTitle
};
var params = new PrintParameters();
params.map = map;
params.template = template;
var printTask = new PrintTask(app.printUrl);
var printObj = {
printTask: printTask,
params: params
}
return printObj;
}
on(dom.byId("btnPrintReady"), "click", function() {
dom.byId("btnPrintReady").innerHTML = "Printing..."
dom.byId("btnPrintReady").disabled = true;
var printObj = createPrintTask("testing");
var printTask = printObj.printTask;
printTask.execute(printObj.params, function(evt) {
dom.byId("btnPrintReady").style.display = 'none';
dom.byId("printResult").href = evt.url;
dom.byId("printResult").style.display = 'block';
on(dom.byId("printResult"), "click", function() {
dom.byId("btnPrintReady").innerHTML = "Print";
dom.byId("btnPrintReady").style.display = 'block';
dom.byId("btnPrintReady").disabled = false;
dom.byId("printResult").style.display = 'none';
});
}, function(evt) {
dom.byId("btnPrintReady").disabled = false;
dom.byId("btnPrintReady").innerHTML = "Print";
});
});
function getLegendJSON() {
var divLegend = dojo.byId("legendDiv");
if (divLegend.innerHTML == "") {
divLegend.innerHTML = "Creating Legend...";
var url = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/MapServer/legend";
var requestHandle = Request({
"url": url,
"content": {
"f": "json"
},
"callbackParamName": "callback"
});
requestHandle.then(requestSucceeded, requestFailed);
}
}
function requestSucceeded(response, io) {
var lyr;
var htmlString = "<table>";
var divLegend = dojo.byId("legendDiv");
var mapURL = "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Fire/Sheep/MapServer";
if (response != null && response.layers.length > 0) {
for (var iCnt = 0; iCnt < response.layers.length; iCnt++) {
lyr = response.layers[iCnt];
if (lyr.legend.length > 0) {
var layerName = lyr.layerName;
htmlString += "<tr><td colspan='2' style='font-weight:bold;'>" + layerName + "</td></tr>";
for (var jCnt = 0; jCnt < lyr.legend.length; jCnt++) {
var src = mapURL + "/" + lyr.layerId + "/images/" + lyr.legend[jCnt].url;
var strlbl = lyr.legend[jCnt].label.replace("<Null>", "Null");
htmlString += "<tr><td align='left' style='padding-left:15px;'><img src=\"" + src + "\" alt ='' /></td><td align='left'>" + strlbl + "</td></tr>";
}
} else {
htmlString += "<tr><td colspan='2' class='tdLayerHeader' style='font-weight:bold;'>" + lyr.layerName + "</td></tr>";
var src = mapURL + "/" + lyr.layerId + "/images/" + lyr.legend[0].url;
htmlString += "<tr><td colspan='2' ><img src=\"" + src + "\" alt ='' /></td></tr>";
}
}
htmlString += "</table>";
}
divLegend.innerHTML = htmlString;
}
function requestFailed(error) {
alert('failed');
}
}
);
</script>
</head>
<body>
<!-- Map Div Begin -->
<div id="content" data-dojo-type="dijit/layout/BorderContainer" design="headline" gutters="true">
<div id="mapLeft">
<form id="frmPrint" action="" onsubmit="return false;">
<div id="feedback">
<div id="information">
<button type="button" id="btnPrintReady">Print</button>
<a href="#" id="printResult" target="_blank" style="display:none;">Get Printout</a>
</div>
</div>
</form>
</div>
<!-- Map Div End -->
<div id="mapRight">
<div id="legendDiv" class="legend-container"></div>
</div>
</div>
<!-- content Div End -->
</body>
</html>