AnsweredAssumed Answered

Print task causes severe ArcGIS for Server log messages

Question asked by ingenue3911 on Jan 17, 2017
Latest reply on Jan 17, 2017 by mvolz47

I've tried to implement a print widget using the print task very closely following this tutorial. However, it is very slow (~60 seconds to export an A3 pdf with default dpi) and I notice the following severe ArcGIS for Server logs:

 

 

Has anyone seen this type of vague log?

 

The python script used:



import arcpy
import os
import uuid

# The template location in the registered folder (as UNC path)
templatePath = '//ourserver/ourtemplatepath

# Input WebMap json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)

# Format for output
Format = arcpy.GetParameterAsText(1)
if Format == '#' or not Format:
Format = "PDF"

# Input Layout template
Layout_Template = arcpy.GetParameterAsText(2)
if Layout_Template == '#' or not Layout_Template:
Layout_Template = "A3 Paysage"

# Extra parameter - georef_info
Georef_info = arcpy.GetParameterAsText(3)
if Georef_info == '#' or not Georef_info:
Georef_info = "False"

# Convert Georef_info string to boolean
if Georef_info.lower() == 'false':
Georef_info_bol = False
elif Georef_info.lower() == 'true':
Georef_info_bol = True

# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')

# Convert the WebMap to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument

# Reference the data frame that contains the webmap
# Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]

# ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap".
# Lets rename it to something more meaningful.
df.name = Layout_Template




# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
output = 'WebMap_{}.{}'.format(str(uuid.uuid1()), Format)
Output_File = os.path.join(arcpy.env.scratchFolder, output)




# Export the WebMap
if Format.lower() == 'pdf':
arcpy.mapping.ExportToPDF(mxd, Output_File, georef_info=Georef_info_bol)
elif Format.lower() == 'png':
arcpy.mapping.ExportToPNG(mxd, Output_File)




# Set the output parameter to be the output file of the server job
arcpy.SetParameterAsText(4, Output_File)




# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)

 


The javascript used to export the maps:



require([
"esri/layers/FeatureLayer",
"esri/dijit/Print",
"esri/tasks/PrintTemplate",
"esri/tasks/PrintTask",
"esri/tasks/PrintParameters",
"esri/tasks/GeometryService",
"esri/tasks/ProjectParameters",
"esri/geometry/Point",
"esri/SpatialReference",
"esri/request",
"esri/config",
"dijit/registry",
"dijit/form/ComboBox",
"dijit/form/Button",
"dijit/form/CheckBox",
"dojox/form/BusyButton",
"dojo/store/Memory",
"dojo/_base/array",
"dojo/dom",
"dojo/on"
], function(
FeatureLayer,
Print, PrintTemplate,
PrintTask, PrintParameters,
GeometryService,
ProjectParameters,
Point, SpatialReference,
esriRequest, esriConfig, registry,
ComboBox, Button, CheckBox, BusyButton, Memory,
arrayUtils, dom, on
) {

//var printUrl = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/PrintingTools/GPServer/Export%20Web%20Map%20Task";
var printUrl = "http://ouragsserver/arcgis/rest/services/SPE_Tools/SPE_Print_Tool_Adv/GPServer/Script";

esriConfig.defaults.io.proxyUrl = "http://ourwebserver/Java/proxy.jsp";
esri.config.defaults.io.timeout = 300000; //60 seconds = 60000

setScalesCombo();

var scaleCheckBox = new CheckBox({
checked: false,
onChange: function (val) {
//dom.byId('one').innerHTML = val ? 'checked' : 'unchecked';
if (scaleCheckBox.checked) {
//params.template.preserveScale = true;
dijit.byId("scale_select").attr("disabled",false);
console.log("checked");
}
else {
//params.template.preserveScale = false;
dijit.byId("scale_select").attr("disabled",true);
console.log("unchecked");
}
}
}, 'scale_check');


var printButton = new BusyButton({
busyLabel: "Impression...",
label: "Imprimer",
timeout: 50000,
onClick: printMap
}, "print_button_bis").startup();


function printMap(){
var printMap = new esri.tasks.PrintTask(printUrl);
var params = new esri.tasks.PrintParameters();
var template = new esri.tasks.PrintTemplate();
document.getElementById("print_status").innerHTML = "Impression en cours...";
document.getElementById("output_url").innerHTML = "";

var layout = dojo.byId("printLayoutId");
var index = layout.selectedIndex;
var selectedValue_layout = layout.options[index].value;
var format = dojo.byId("format");
var index = format.selectedIndex;
var selectedValue_format = format.options[index].value;


var lat = window.myMap.extent.getCenter().getLatitude().toFixed(2);
var long = window.myMap.extent.getCenter().getLongitude().toFixed(2);

var latLong = "Latitude : " + lat + " - Longitude : " + long;

var X;
var Y;

var rgpfSixSudSR = new SpatialReference ({
wkid : 3297
});

var wgsGCSEightFourSR = new SpatialReference ({
wkid : 4326
});

var geometryService = new GeometryService("http://ourserver/arcgis/rest/services/Utilities/Geometry/GeometryServer");
var inputPoint = new Point(lat, long, wgsGCSEightFourSR);
var prjParams = new ProjectParameters ();
prjParams.geometries = [inputPoint];
prjParams.outSR = rgpfSixSudSR;

geometryService.project(prjParams, function (outputpoint) {
console.log('Conversion completed');
X = outputpoint[0].x;
Y = outputpoint[0].y;
//console.log('X : ' + X ' and Y : ' + Y);

});

var center = "X : " + X + " - Y : " + Y;

//params.template.layoutOptions.customTextElements.centerLatLong = latLong;
//params.template.layoutOptions.customTextElements.centerXY = center;

console.log(latLong);
console.log(center);


params.map = window.myMap;

if (scaleCheckBox.checked) {
params.template = {
layout: selectedValue_layout,
format: selectedValue_format,
preserveScale: true,
layoutOptions: {
customTextElements : [
{
centerLatLong: latLong
}
// {
// centerXY: center
// }
]
// legendLayer: [legendLayer]
}
}
console.log("checked");
}
else {
params.template = {
layout: selectedValue_layout,
format: selectedValue_format,
preserveScale: false,
layoutOptions: {
customTextElements : [
{
centerLatLong: latLong
}
// {
// centerXY: center
// }
]
// legendLayer: [legendLayer]
}
}
console.log("unchecked");
}



//window.myMap.on('extent-change', showExtent());



printMap.execute(params, printResult);

// dojo.connect(printMap,'onComplete',function(result){
// window.open(result.url);
// })


function printResult(result){
console.log(result.url);
document.getElementById("print_status").innerHTML = "";
document.getElementById("output_url").href = result.url;
document.getElementById("output_url").innerHTML = "Impression";
var printWindow = window.open(result.url);


};
};

function setScalesCombo() {
var scaleStore = new Memory({
data: [
{name:"100", id:"100"},
{name:"200", id:"200"},
{name:"500", id:"500"},
{name:"1000", id:"1000"},
]
});

var scaleSelect = new ComboBox({
id: "scale_select",
style: {width: "150px"},
name: "scale_select",
placeHolder: "Choisir une échelle",
store: scaleStore,
disabled: true,
onChange: function(value){
//document.getElementById("value").innerHTML = value;
mapScale = value;
window.myMap.setScale(mapScale);
}
}, "scale_select");
scaleSelect.startup();
}

});

 

Added to html body like this:

 

<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="title:'Impressions'">

<select name="printLayout" id="printLayoutId">
<option value="A3_paysage">A3 Paysage</option>
<option value="A3_portrait">A3 Portrait</option>
<option value="A4_paysage">A4 Paysage</option>
<option value="A4_portrait">A4 Portrait</option>
<!-- <option value="Letter ANSI A Landscape" selected>Letter ANSI A Landscape</option>
<option value="Letter ANSI A Portrait">Letter ANSI A Portrait</option>
<option value="Tabloid ANSI B Landscape">Tabloid ANSI B Landscape</option>
<option value="Tabloid ANSI B Portrait">Tabloid ANSI B Portrait</option> -->
</select>
<br>
<select id="format">
<OPTION value="PDF">PDF</OPTION>
<OPTION value="PNG">PNG</OPTION>
</select>
<br>
<br>
<!-- <input type="checkbox" id="check_scales" checked
data-dojo-type="dijit/form/CheckBox"
data-dojo-props="checked: true"> -->
<div id="scale_check"></div>
<label for="scale_check">Imprimer à l'échelle</label>

<div id="scale_select" class="comboClass"></div>

<button id="print_button_bis" type="button"></button>
<p id="print_status"></p>
<a id="output_url" href="#"></a>
<!--<input type="button" id="print" value = "Print" onclick="printMap();"/>-->


</div>

Outcomes