Руководство пользователя. высококачественная печать и экспорт веб-карт с помощью arcpy.mapping

Уровень сложности: Средний Требования к данным: ArcGIS.com

В этом руководстве вы создадите веб-приложение, с которым конечному пользователю нужно будет только переместиться в определенную область и нажать кнопку Print. В результате будет получен пригодный для печати документ в формате PDF, содержащий высококачественные выходные векторные данные для слоев сервиса.

По умолчанию экспорт из веб-приложения с помощью готового сервиса Printing Tools и его клиентских виджетов печати в веб-интерфейсах API ArcGIS выводит изображение слоев сервисов с разрешением (например, 96 dpi), которое недостаточно для крупноформатной печати или высококачественного картографического результата. Это особенно справедливо, если слои сервисов используют полистный кэш карты. В таком случае выходными данными слоев сервисов будет кэшированное полистное изображение.

На иллюстрации ниже показаны два примера выходных файлов PDF. На изображении слева показано, как может выглядеть полистный кэш слоев сервисов при экспорте в крупноформатный PDF с применением увеличения. Он будет отлично выглядеть при меньшем или в кэшированном масштабе. Он также будет нормально выглядеть в размере letter или tabloid, но не более того.

На рисунке справа показаны векторные данные. Он намного более сглаженный и больше подходит для высококачественной картографической визуализации. В этом руководстве будет показано, как настраивать готовые варианты печати, чтобы получить пригодный для печати документ PDF, содержащий высококачественные выходные векторные данные для слоев сервисов.

Примеры выходных файлов с низким и высоким разрешением

В веб-приложении, которое вы построите, будут выведены векторные эквиваленты сервисной базовой карты World Topographic. Векторный поднабор базовой карты World Topographic доступен на Ресурсном центре ArcGIS (ArcGIS Resource Center).

ПримечаниеПримечание:

Для того, чтобы создать выходной документ, содержащий высококачественные локальные векторные данные вместо кэшированного полистного изображения слоев сервисов, у вас должен быть доступ к векторным данным.

Ниже приведена иллюстрация создаваемого веб-приложения.

Веб-приложение

Код за кнопкой Печать (Print) в веб-приложении использует Задача Печать (Print Task) веб-API ArcGIS, который доступен для ArcGIS 10.1 for Server. Вы создадите скрипт Python, который будет опубликован как сервис геообработки и будет использоваться Задачей Печать (Print Task). Скрипт Python использует функцию ConvertWebMapToMapDocument в модуле arcpy.mapping module, который вставит все элементы веб-карты в промежуточный шаблон документа карты. Этот шаблон содержит векторные эквиваленты всех возможных слоев в картографическом сервисе. В модуле arcpy.mapping также предусмотрена функциональная возможность удаления слоев сервисов, оставляя локальные векторные данные в шаблоне документа карты, и экспорта в PDF.

При нажатии кнопки Печать (Print) будет получен в формате для печати документ PDF, содержащий высококачественные локальные векторные данные вместо кэшированного полистного изображения слоев сервисов.

В заключении данного руководства вы ознакомитесь с модулем arcpy.mapping, ArcGIS web API, ArcGIS for Desktop и ArcGIS 10.1 for Server. Данное руководство содержит образцы кода для всех ArcGIS web API. Вам также следует познакомиться с печатью в разделах справки веб-приложения:

Печать в веб-приложениях (Printing in web applications)Расширенные функции печати для веб-карт (Advanced printing for web maps)

Получение векторных данных из Ресурсного центра ArcGIS (ArcGIS Resource Center)

Вы загрузите zip-файл с Map Template Gallery Ресурсного центра ArcGIS; этот файл содержит векторные данные, которые будут использоваться в промежуточном шаблоне документа карты.

Прежде, чем вы это сделаете, необходимо убедиться в наличии структуры папок в том местоположении, где ArcGIS for Server может видеть шаблон документа карты и данные, которые будут использоваться в веб-приложении. В этом руководстве подразумевается, что у вас уже есть папка, зарегистрированная на ArcGIS for Server. Дополнительные сведения о регистрации данных на ArcGIS for Server см. в разделах:

ПодсказкаПодсказка:

При использовании шаблонов документов карт в функции ConvertWebMapToMapDocument рекомендуется использовать данные, которые зарегистрированы на ArcGIS for Server. Если не использовать зарегистрированные данные, то шаблоны документов карт и данные будут упакованы и скопированы на сервер. Во время упаковки данные могут перемещаться и использоваться в качестве источника с соответствующими путями к структуре папок, которые не могут быть разрешены ConvertWebMapToMapDocument. Для получения дополнительной информации см. раздел помощи ConvertWebMapToMapDocument.

Шаги:
  1. Начните новый сеанс ArcMap.
  2. В окне Каталог (Catalog) перейдите к своей зарегистрированной папке. Создайте новую директорию в зарегистрированной папке с именем BasicTutorial.
  3. Перейдите к Map Template Gallery Ресурсного центра ArcGIS. Выберите шаблон Topographic Map Template – Medium Scales.
  4. Скачайте zip-файл Topographic Map Template – Medium Scales на свой компьютер, нажав кнопку Загрузить (Download).
  5. Извлеките содержимое zip-файла в папку BasicTutorial в зарегистрированной папке.
  6. Ваша зарегистрированная папка должна выглядеть примерно так, как показано на следующей иллюстрации.
    Зарегистрированная папка
    ПримечаниеПримечание:

    На снимке экрана вверху зарегистрированная папка имеет имя MyDataStore. Ваша зарегистрированная папка может иметь любое имя.

Подготовка документа карты для использования в качестве шаблона в веб-приложении

В загруженных вами данных с Ресурсного центра ArcGIS содержалось два документа карты. MediumScales_anno.mxd будет использован в веб-приложении. Эта карта и данные предназначены для использования в средних масштабах, примерно от :1500000 до 1:18000. Максимальный диапазон масштаба в документе карты использовать не следует, чтобы пользователи веб-приложения могли увеличивать сверх максимального масштаба и при этом делать распечатку.

Шаги:
  1. Откройте MediumScales_anno.mxd в ArcMap.
  2. Щелкните правой кнопкой мыши составной слой Level 14 ~1:36K в таблице содержания и выберите Свойства (Properties).
  3. Щелкните закладку Общие (General).
  4. В ниспадающем списке Не показывать слой при увеличении масштаба свыше выберите <Нет (None)>.
  5. Нажмите OK в диалоговом окне Свойства составного слоя (Group Layer Properties).
  6. Сохраните документ карты.

Теперь документ карты подготовлен для использования в веб-приложении.

Создание скрипта Python

Вы создадите скрипт Python, который будет использоваться как пользовательский сервис геообработки и печати (custom geoprocessing print service).

Скрипт Python в пользовательском сервисе геообработки и печати выполняет функцию ConvertWebMapToMapDocument, которая конвертирует веб-карту (в формате JSON), которую вы собираетесь вывести на печать или экспортировать, в документ карты. Затем скрипт удаляет слои сервисов в документе карты, оставляя векторные слои, которые соответствуют сервисному слою в веб-карте JSON. Веб-карта JSON содержит также экстент карты в веб-приложении. Наконец, скрипт экспортирует документ карты в PDF.

Шаги:
  1. Откройте любой Python IDE, например – IDLE (который поставляется с ArcGIS for Desktop).
  2. Скопируйте и вставьте следующий код в новый скрипт Python.
  3. import arcpy
    import os
    import uuid
    
    # Input WebMap json
    Web_Map_as_JSON = arcpy.GetParameterAsText(0)
    
    # The template location in the server data store
    templateMxd = '//zoid/MyDataStore/BasicTutorial/Maps and GDBs/MediumScales_Anno.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]
    
    # Remove the service layer
    # This will just leave the vector layers from the template
    for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
        if lyr.isServiceLayer:
            arcpy.mapping.RemoveLayer(df, lyr)
            
    # Use the uuid module to generate a GUID as part of the output name
    # This will ensure a unique output name
    output = 'WebMap_{}.pdf'.format(str(uuid.uuid1()))
    Output_File = os.path.join(arcpy.env.scratchFolder, output)
    
    # Export the WebMap
    arcpy.mapping.ExportToPDF(mxd, Output_File) 
    
    # Set the output parameter to be the output file of the server job
    arcpy.SetParameterAsText(1, Output_File)
    
    # Clean up - delete the map document reference
    filePath = mxd.filePath
    del mxd, result
    os.remove(filePath)
    
  4. Измените переменную templateMxd, чтобы она представляла путь UNC к папке в вашей зарегистрированной папке, содержащей шаблоны документов карт.
  5. ПримечаниеПримечание:

    Если и ArcGIS for Server, и ArcGIS for Desktop, и зарегистрированная папка размещены на одном компьютере, то пути UNC к зарегистрированной папке не требуются. Вместо них могут использоваться абсолютные пути.

  6. Сохраните скрипт Python. Назовите скрипт BasicTutorial.py. Сохраните его в папке с именем WebApp в зарегистрированной папке.

Создание инструмента-скрипта Python

Вы создадите собственный инструмент геообработки, который будет выполнять скрипт BasicTutorial.py.

Шаги:
  1. В окне Каталог в ArcMap перейдите к папке WebApp в директории зарегистрированной папки.
  2. Правой кнопкой мыши щелкните папку WebApp и выберите Создать (New) > Набор инструментов (Toolbox). Назовите набор инструментов BasicTutorial.
  3. Щелкните правой кнопкой набор инструментов BasicTutorial и выберите Описание элемента (Item Description).
  4. В диалоговом окне Описание элемента (Item Description) в элементах Теги (Tags) и Сводка (Summary) введите любой выбранный вами текст. Дополнительно, заполните другие описания элементов.
  5. Выберите Сохранить (Save) и выйдите из диалогового окна Описание элемента (Item Description).
  6. В окне Каталог (Catalog)щелкните правой кнопкой набор инструментов BasicTutorial и выберите Добавить (Add) > Скрипт (Script).
  7. В диалоговом окне Добавить скрипт (Add Script) введите BasicTutorial и для Имени (Name), и для Надписи (Label).
  8. Щелкните Далее (Next).
  9. Для параметра Script File перейдите к папке WebApp в зарегистрированной папке и выберите BasicTutorial.py.
  10. Щелкните Далее (Next).
  11. В инструмент-скрипт необходимо добавить два параметра.
    1. Первый из этих двух параметров – Web_Map_as_JSON. Этот параметр получает представление JSON состояния карты для экспорта, как она отобразится в веб-приложении. Свойства должны соответствовать следующему снимку экрана:
      Свойства параметра Web_Map_as_JSON
    2. Второй параметр это – Output_File – выходной файл, который будет создан. Свойства должны соответствовать следующему снимку экрана:
      Свойства параметров Output_File

      ВниманиеВнимание:

      Имена параметров Web_Map_as_JSON и Output_File должны вводиться так, как показано, с точностью до буквы, чтобы они соответствовали подписи инструмента Задачи Печать (Print Task) в ArcGIS web API.

    3. Щелкните Готово (Finish) в диалоговом окне Добавить скрипт (Add Script).
  12. Щелкните правой кнопкой инструмент-скрипт BasicTutorial и выберите Описание элемента (Item Description).
  13. В диалоговом окне Описание элемента (Item Description) заполните поля Теги (Tags) и Сводка (Summary) любым выбранным вами текстом. Также введите любой выбранный вами текст в поле Пояснение диалога (Dialog Explanation) для всех четырех параметров в секции Синтаксис (Syntax) диалогового окна Описание элемента (Item Description). Дополнительно, заполните другие описания элементов.

Выполните инструмент

Инструмент должен быть выполнен успешно, чтобы в окне Результаты (Results) появился результат, который мог бы быть опубликован на ArcGIS for Server.

Шаги:
  1. В окне Каталог (Catalog) щелкните правой кнопкой инструмент-скрипт BasicTutorial и выберите Открыть (Open).
  2. Оставьте параметр Web_Map_as_JSON пустым.
    ПодсказкаПодсказка:

    Для целей публикации вы можете оставить входной параметр Web_Map_as_JSON пустым, поскольку веб-карта JSON будет обеспечена ArcGIS web API в веб-приложении. Входной параметр Web_Map_as_JSON может быть оставлен пустым при условии, что скрипт Python был написан таким образом, чтобы он мог работать и при пустом входном параметре. Например, скрипт не ищет слои веб-карт по имени.

  3. Нажмите ОК. Дождитесь окончания выполнения инструмента.

Теперь результат готов для публикации как в качестве сервиса геообработки.

Публикация результата

Если вы не знакомы с публикацией сервисов геообработки, обратитесь к следующим разделам:

Шаги:
  1. Откройте окноРезультаты (Results).
  2. Разверните пункт Текущий сеанс (Current Session).
  3. Щелкните правой кнопкой мыши результат BasicTutorial и выберите Общий доступ как (Share As) > Сервис геообработки (Geoprocessing Service).
  4. Отметьте Опубликовать сервис (Publish a service).
  5. Щелкните Далее (Next).
  6. Выберите издательское или административное подключение к серверу ArcGIS 10.1 for Server.
  7. Щелкните Далее (Next).
  8. Щелкните Далее (Next).
  9. Нажмите кнопку Продолжить (Continue).
  10. В верхнем правом углу диалогового окна Редактор сервисов (Service Editor) щелкните Опубликовать (Publish).

Теперь сервис геообработки подготовлен для использования в ArcGIS web API.

Выбор ArcGIS web API, который будет использоваться для создания веб-приложения

ArcGIS web API предлагает аналогичную функциональность ГИС; вам нужно выбрать предпочитаемую платформу разработки. Данное руководство не ставит свой целью подробное рассмотрение начала работы по построению веб-приложений с каждым API. Для этого обратитесь к документации API. Для получения дополнительной информации см.:

Каждый ArcGIS web API имеет Задачу Печать (Print Task). Задача Печать (Print Task) имеет свойство URL, которое ссылается на ранее созданный вами пользовательский сервис геообработки. Более подробно о Задаче Печать (Print Task) см. в документации ArcGIS web API.

В следующих разделах используйте образцы кодов для ArcGIS web API, которые вы вводите для создания своего веб-приложения.

Образец кода ArcGIS API for JavaScript

Если вы используете ArcGIS API for JavaScript, используйте следующий образец кода для создания своего веб-приложения.

В следующем образце кода ArcGIS API for JavaScript измените URL на сервис геообработки, который был вами создан в предыдущем шаге, чтобы он соответствовал имени вашего сервера. Эта строка содержит ссылки на:

var printUrl = "http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial";

Код для BasicTutorial.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
  	<title>Webmap Printing</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.0/js/dojo/dijit/themes/claro/claro.css">  
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=3.0"></script>
    <script type="text/javascript" language="Javascript">
      dojo.require("esri.map");
      dojo.require("esri.tasks.PrintTask");
      var printTask, params;
      
      function init() {
		     // limit scales in webmap to the usable scales of the template map document      	
      	var lods = [ {"level" : 11, "resolution" : 76.4370282850732, "scale" : 288895.277144},
           {"level" : 12, "resolution" : 38.2185141425366, "scale" : 144447.638572},
           {"level" : 13, "resolution" : 19.1092570712683, "scale" : 72223.819286},
           {"level" : 14, "resolution" : 9.55462853563415, "scale" : 36111.909643},
           {"level" : 15, "resolution" : 4.77731426794937, "scale" : 18055.954822}];
      	
        // set the extent to the Portland area - which matches the extent of the template map document
        var startExtent = new esri.geometry.Extent({"xmin":-13679000,"ymin":5680000,
        											"xmax":-13635000,"ymax":5740000,
        											"spatialReference":{"wkid":102100}});
        											
        var map = new esri.Map("map", {extent:startExtent, lods:lods});
        
        // add tiled map service to webmap
        var tiledUrl = "http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer";
        var tiledLayer = new esri.layers.ArcGISTiledMapServiceLayer(tiledUrl);
        map.addLayer(tiledLayer);
		      var printUrl = "http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial";
		      printTask = new esri.tasks.PrintTask(printUrl, {async: true});
		      params = new esri.tasks.PrintParameters();
        params.map = map;  
      }
      
      function print(){
      	var ptemplate = new esri.tasks.PrintTemplate();
      	// use the extent of the webmap in the output PDF
      	ptemplate.preserveScale = false;
      	params.template = ptemplate;
        printTask.execute(params, printComplete);
      }
      
      function printComplete(result){
        window.open(result.url);
      }

      dojo.addOnLoad(init);

    </script>
  </head>
  <body class="claro">
  	 <input type="button" id="print" value="Print" onclick="print();"/>
    <div id="map" style="width:1000px; height:600px; border:1px solid #000;"></div>
  </body>
</html>

Образец кода ArcGIS API for Flex

Если вы используете ArcGIS API for Flex, используйте следующий образец кода для создания своего веб-приложения.

В следующем образце кода ArcGIS API for Flex измените URL на сервис геообработки, который был вами создан в предыдущем шаге, чтобы он соответствовал имени вашего сервера. Эти строки содержат ссылки на:

url="http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial"/>

Код для BasicTutorial.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:esri="http://www.esri.com/2008/ags"
			   initialize="printTask.getServiceInfo()"
			   pageTitle="High-quality printing">
	
	<fx:Script>
		<![CDATA[
			import com.esri.ags.events.PrintEvent;
			import com.esri.ags.tasks.supportClasses.DataFile;
			import com.esri.ags.tasks.supportClasses.JobInfo;
			import com.esri.ags.tasks.supportClasses.ParameterValue;
			
			import mx.controls.Alert;
			
			public var preserveScale:Boolean = true;
			
			private function printBtn_clickHandler(event:MouseEvent):void
			{
				if (printTask.getServiceInfoLastResult.isServiceAsynchronous)
				{
					printTask.submitJob(printParameters);
				}
				else
				{
					printTask.execute(printParameters);
				}
			}
			
			private function printTask_jobCompleteHandler(event:PrintEvent):void
			{
				var jobInfo:JobInfo = event.jobInfo;
				if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)
				{
					printTask.getResultData(jobInfo.jobId);
				}
				else
				{
					Alert.show(jobInfo.jobStatus);
				}
			}
			
			private function printTask_getResultDataCompleteHandler(event:PrintEvent):void
			{
				var dataFile:DataFile = event.parameterValue.value as DataFile;
				navigateToURL(new URLRequest(dataFile.url));
			}
			
			private function printTask_executeCompleteHandler(event:PrintEvent):void
			{
				var paramValue:ParameterValue = event.executeResult.results[0];
				var dataFile:DataFile = paramValue.value as DataFile;
				navigateToURL(new URLRequest(dataFile.url));
			}
		]]>
	</fx:Script>
	
	<fx:Declarations>
		<esri:PrintTask id="printTask"
						executeComplete="printTask_executeCompleteHandler(event)"
						fault="Alert.show(event.fault.faultString)"
						getResultDataComplete="printTask_getResultDataCompleteHandler(event)"
						jobComplete="printTask_jobCompleteHandler(event)"
						showBusyCursor="false"
						url="http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial"/>
		<esri:PrintParameters id="printParameters"
							  preserveScale="false"
							  map="{map}">
		</esri:PrintParameters>
		
		<esri:Extent id="initialExtent"
					 xmin="-13679000" ymin="5680000" xmax="-13635000" ymax="5740000">
			<esri:SpatialReference wkid="102100"/>
		</esri:Extent>
		
	</fx:Declarations>
	
	<s:controlBarLayout>
		<s:HorizontalLayout gap="10"
							paddingBottom="7"
							paddingLeft="10"
							paddingRight="10"
							paddingTop="7"
							verticalAlign="baseline"/>
	</s:controlBarLayout>
	<s:controlBarContent>
		<s:Button id="printBtn"
				  click="printBtn_clickHandler(event)"
				  enabled="{printTask.getServiceInfoLastResult != null}"
				  label="Print"/>
	</s:controlBarContent>

	<esri:Map id="map" extent="{initialExtent}">
		<esri:lods>
			<esri:LOD resolution="76.4370282850732" scale="288895.277144"/>
			<esri:LOD resolution="38.2185141425366" scale="144447.638572"/>
			<esri:LOD resolution="19.1092570712683" scale="72223.819286"/>
			<esri:LOD resolution="9.55462853563415" scale="36111.909643"/>
			<esri:LOD resolution="4.77731426794937" scale="18055.954822"/>
		</esri:lods>

		<esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
	</esri:Map>
	
</s:Application>

Образец кода ArcGIS API for Silverlight

Если вы используете ArcGIS API for Silverlight, используйте следующий образец кода для создания своего веб-приложения.

Код XAML:

<UserControl x:Class="Basic_Tutorial.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:esri="http://schemas.esri.com/arcgis/client/2009">

    <Grid x:Name="LayoutRoot" Background="White">

        <esri:Map x:Name="MyMap" Extent="-13679000,5680000,-13635000,5740000">
            <esri:Map.Layers>
                <esri:ArcGISTiledMapServiceLayer ID="MyTiledService" 
                    Url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer"/>
            </esri:Map.Layers>
        </esri:Map>

        <StackPanel Orientation="Vertical" Margin="15" HorizontalAlignment="Left" VerticalAlignment="Top" >
            <Border x:Name="PrintPanel" CornerRadius="10" BorderBrush="Gray" BorderThickness="1" Background="White" HorizontalAlignment="Left" 
                    VerticalAlignment="Top" Margin="15" Padding="10">
                <Border.Effect>
                    <DropShadowEffect/>
                </Border.Effect>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Button x:Name="Print" Content="Print" Click="ExportMap_Click" 
                            Grid.Row="1" Grid.Column="0" Margin="2"/>
                </Grid>
            </Border>
        </StackPanel>
    </Grid>
</UserControl>

В следующем образце кода ArcGIS API for Silverlight измените URL на сервис геообработки, который был вами создан в предыдущем шаге, чтобы он соответствовал имени вашего сервера. Эта строка содержит ссылки на:

printTask = new PrintTask("http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial");

Код в C#:

using System;
using System.Windows;
using System.Windows.Controls;
using ESRI.ArcGIS.Client.Printing;
using ESRI.ArcGIS.Client.Tasks;


namespace Basic_Tutorial
{
    public partial class MainPage : UserControl
    {
        PrintTask printTask;
        public MainPage()
        {
            InitializeComponent();
            printTask = new PrintTask("http://MyServer:6080/arcgis/rest/services/BasicTutorial/GPServer/BasicTutorial");
            printTask.DisableClientCaching = true;
            printTask.JobCompleted += new EventHandler<PrintJobEventArgs>(printTask_JobCompleted);
            printTask.GetServiceInfoCompleted += new EventHandler<ServiceInfoEventArgs>(printTask_GetServiceInfoCompleted);
            printTask.GetServiceInfoAsync();
        }

        void printTask_GetServiceInfoCompleted(object sender, ServiceInfoEventArgs e)
        {
            PrintPanel.DataContext = e.ServiceInfo;
        }


        void printTask_JobCompleted(object sender, PrintJobEventArgs e)
        {
            if (e.Error == null)
            {
                if (e.PrintResult != null)
                    System.Windows.Browser.HtmlPage.Window.Navigate(e.PrintResult.Url, "_blank");
            }
        }

        private void ExportMap_Click(object sender, RoutedEventArgs e)
        {

            if (printTask == null || printTask.IsBusy) return;

            PrintParameters printParameters = new PrintParameters(MyMap)
            {

            };
            printTask.SubmitJobAsync(printParameters);
        }
    }
}

Запуск веб-приложения

Запустите веб-приложение, которое вы создали в предыдущем шаге. При необходимости обратитесь к документации ArcGIS web API с инструкциями по запуску веб-приложений. Ниже показан снимок экрана веб-приложения API ArcGIS for JavaScript.

Образец веб-приложения

Увеличьте интересующую вас область и нажмите кнопку Печать (Print). Через некоторое время на экране автоматически высветится выходной файл PDF. На выходе будет получен в формате для печати документ PDF, содержащий высококачественные локальные векторные данные, которые были выставлены в шаблонах компоновки, вместо кэшированного полистного изображения слоев сервисов. Это дает картографический результат еще более высокого качества. См. образец ниже:

Пример полученного документа PDF

Это завершает руководство пользователя по основам высококачественной печати и экспорта веб-карт. Дополнительные сведения см. в разделе расширенные возможности высококачественной печати и экспорта веб-карт (Advanced high-quality web map printing/exporting tutorial).

Связанные темы

9/11/2013