Краткая информация
Конвертирует веб-карту (в формате JSON), которую вы хотите напечатать или экспортировать, в документ карты. Документ карты затем можно изменить перед печатью или экспортом.
Описание
Функция ConvertWebMapToMapDocument конвертирует веб-карту, которую вы хотите напечатать или экспортировать, в документ карты. После преобразования документа, в документе карты содержатся все элементы веб-карты. Затем можно изменить документ карты перед печатью или экспортом в стандартные форматы, такие как PDF. ConvertWebMapToMapDocument обычно используется при печати карт из веб-приложений ГИС с помощью ArcGIS API for JavaScript.
Функция ConvertWebMapToMapDocument в основном предназначена для рабочих процессов, в которых необходимо изменить или экспортировать веб-карту с помощью функций arcpy.mapping. Несколько примеров использования функции ConvertWebMapToMapDocument в рабочих процессах:
- Выгрузка сервисных слоев для локальных векторных данных – в скриптах arcpy.mapping сервисные слои можно идентифицировать и выгрузить для использования в слоях, обращающихся к локальным данным. Это обычно требуется, если необходимы выходные данные в векторном формате, вместо слоев сервиса. Например, векторные выходные данные в PDF поддерживают в приложении просмотра PDF следующие функции: переключение видимости слоев, просмотр атрибутов объектов и просмотр координат карты. Один из способов выгрузки сервисных слоев для векторных данных – использовать шаблоны документов карты, которые содержат векторные эквиваленты всех возможных сервисных слоев. После выполнения функции ConvertWebMapToMapDocument просмотрите все слои выходного документа карты и удалите все слои, кроме векторных, которые соответствуют сервисным слоям веб-карты. Этот рабочий процесс можно использовать при замене ваших собственных сервисов на соответствующие векторные данные, которые у вас уже есть.
- Cоздание атласов – если Многостраничная компоновка (Data Driven Pages) для template_mxd разрешена, можно создавать серии карт. Более того, выходной документ карты можно экспортировать в PDF, а затем загрузить в другой файл PDF, используя класс PDFDocument для создания полного атласа.
- Экспорт с помощью расширенных опций – все функции экспорта в arcpy.mapping имеют множество расширенных опций. Например, функция ExportToPDF имеет параметры для управления сжатием растровых и векторных данных, задания цветового пространства, внедрения шрифтов и т.д.
- Управление отображением легенды – модуль arcpy.mapping обеспечивает возможность удаления или изменения элементов легенды и их стиля с помощью пользовательских настроек класса LegendElement и функции ListStyleItems.
Если у вас есть скрипт Python, который готовит карту для печати, вы можете включить его в инструмент-скрипт геообработки. Затем вы можете опубликовать инструмент-скрипт в качестве сервиса геообработки ArcGIS Server. ArcGIS API for JavaScript содержит задачу Печать которую вы можете использовать в своем веб-приложении ГИС. Print Task имеет параметр URL, который ссылается на REST URL созданного вами сервиса геообработки.
Более подробную информацию по сервисам геообработки см. в следующих разделах:
- Что такое сервис геообработки? (What is a geoprocessing service?)
- Краткий обзор по разработке и предоставлению общего доступа к сервисам геообработки (A quick tour of authoring and sharing geoprocessing services)
- Краткий обзор по публикации сервисов геообработки (A quick tour of publishing a geoprocessing service)
- Словарь основных терминов по сервисам геообработки (Essential vocabulary for geoprocessing services)
При использовании ConvertWebMapToMapDocument в сервисе геообработки в ArcGIS Web API имена параметров инструмента-скрипта должны совпадать с параметрами Print Task в ArcGIS Web API:
Имя параметра | Тип данных | Описание |
---|---|---|
Web_Map_as_JSON | Строка | Представление JSON состояния карты для экспорта из веб-приложения. Интерфейсы Web API ArcGIS (JavaScript, Flex и Silverlight) позволяют разработчикам легко получить эту строку JSON из веб-приложения. |
Output_File | Файл | Имя выходного файла. Расширение файла зависит от параметра Format. |
Формат | Строка | Формат, в котором будет предоставлено изображение карты для печати. Разрешены следующие строки:
|
Layout_Template | Строка | Имя шаблона из списка или ключевое слово MAP_ONLY. Когда выбрано MAP_ONLY или передается пустая строка, выходная карта не содержит никаких окружающих объектов компоновки страницы (например – название, легенды, масштабную линейку). |
ConvertWebMapToMapDocument обычно используется при печати карт из веб-приложений. Если вы используете задачу Print Task в ArcGIS Web API, создавать веб-карту JSON не нужно; это сделают интерфейсы API. Однако прежде чем скрипт будет опубликован и использован в веб-API, его необходимо запустить локально. При локальном запуске скрипта можно использовать любую допустимую строку JSON. Строка JSON, похожая на то, что возвращает веб-приложение, может потребоваться для успешного выполнения скрипта. См. спецификацию ExportWebMap, чтобы узнать, как должен быть отформатирован этот текст. Пример строки показан ниже:
{
"layoutOptions": {
"titleText": "Simple WebMap JSON example"
},
"operationalLayers": [
{
"url": "http://maps1.arcgisonline.com/ArcGIS/rest/services/USA_Federal_Lands/MapServer",
"visibility": true
}
],
"exportOptions": {
"outputSize": [
1500,
1500
]
},
"mapOptions": {
"extent": {
"xmin": -13077000,
"ymin": 4031000,
"xmax": -13023000,
"ymax": 4053000
}
},
"version": "1.4"
}
При запуске инструмента-скрипта строку JSON можно скопировать и вставить во входной параметр Web_Map_as_JSON. Однако переносы строк необходимо удалить. Пример строки JSON с удаленными переносами строк:
{"layoutOptions": {"titleText": "Simple WebMap JSON example"},"operationalLayers": [{"url": "http://maps1.arcgisonline.com/ArcGIS/rest/services/USA_Federal_Lands/MapServer","visibility": true}],"exportOptions": {"outputSize": [1500,1500]},"mapOptions": {"extent": {"xmin": -13077000,"ymin": 4031000,"xmax": -13023000,"ymax": 4053000}},"version": "1.4"}
Когда вы включаете скрипт Python, который использует ConvertWebMapToMapDocument, в сервис геообработки, необходимо убедиться, что ArcGIS for Server может видеть документы шаблонов карт и данные, которые будут использоваться в веб-приложении. Наилучший вариант – использовать папку, зарегистрированную в ArcGIS for Server. Более подробно о регистрации данных см. в следующих разделах:
- Как сделать данные доступными для ArcGIS for Server
- Регистрация данных на ArcGIS for Server
- Регистрация данных на ArcGIS for Server с помощью ArcGIS for Desktop
При создании шаблонов документов карт в зарегистрированной папке лучшим вариантом будет использование относительных путей. Таким образом, ArcGIS for Server будет способен найти данные в зарегистрированной папке относительно расположения документов карты. Дополнительная информация приведена в разделе Как карта ссылается на данные.
В дополнение к созданию ваших собственных шаблонов документов карты, вы также можете использовать уже готовые шаблоны, которые поставляются с программным обеспечением. Они находятся в папке <installation_directory>\Templates\ExportWebMapTemplates. Эти шаблоны содержат элементы карты, такие как легенда, динамический текст текущей даты, шкалу масштаба и текст масштаба.
По умолчанию наложение заметок или графика со стороны клиента для веб-приложения будут сохраняться в рабочей области в памяти. Рабочая область в памяти является временной и удаляется при закрытии приложения. Чтобы получить постоянную копию выходного документа карты, содержащего заметки, задайте notes_gdb; затем используйте инструмент геообработки Собрать карту (Consolidate Map) или Упаковать карту (Package Map), чтобы сделать копию выходного документа карты. Задавать параметр notes_gdb необходимо только в том случае, если вы планируете создать постоянную копию выходного документа карты. См. пример 2 кода ниже. Если веб-карта не содержит наложения заметок, можно использовать метод saveACopy из класса MapDocument, чтобы получить постоянную копию выходного документа карты.
Модуль arcpy.mapping также обеспечивает методы управления отображением легенды в компоновке выходного документа карты. Метод removeItem в классе LegendElement позволяет удалять элементы легенды. Этот процесс описывается в расширенном руководстве. Для обновления элементов легенды используйте метод updateItem класса LegendElement, а также метод ListStyleItems.
Если ваши веб-приложения используют динамические слои, функция updateLayerFromJSON из класса Layer может использоваться для обновления свойств (например, символов) промежуточных векторных слоев в шаблоне mxd с определением динамических слоев из JSON веб-карты. Это удобно, если веб-приложение позволяет менять символы динамических слоев, и вы хотите заменить слои сервиса на промежуточные векторные данные, но все еще видите обновленные символы из веб-приложения. См. пример 6 кода ниже.
Внимательно ознакомьтесь со следующими руководствами. В них описывается полный процесс высококачественной векторной печати и экспорта с помощью ConvertWebMapToMapDocument: создание промежуточного шаблона документа карты, создание скрипта Python, создание сервиса геообработки и веб-приложения.
Синтаксис
ConvertWebMapToMapDocument (webmap_json, {template_mxd}, {notes_gdb}, {extra_conversion_options})
Параметр | Объяснение | Тип данных |
webmap_json | Веб-карта для печати в формате JavaScript Object Notation (JSON). Для получения подробной информации см. раздел Спецификации ExportWebMap JSON. Интерфейсы Web API ArcGIS (JavaScript, Flex и Silverlight) позволяют разработчикам легко получить эту строку JSON из веб-приложения. | String |
template_mxd | Строка, содержащая путь и имя файла документа карты (.mxd), использующегося в качестве шаблона компоновки страницы. Содержание веб-карты будет вставлено во фрейм данных, который был активным в момент сохранения шаблона template_mxd. Слои активного фрейма данных из файла template_mxd (и всех других фреймов данных) будут сохранены в выходном документе mapDocument. (Значение по умолчанию — None) | String |
notes_gdb | Строка, содержащая путь к новой или существующей файловой базе геоданных либо к имеющемуся подключению к многопользовательской базе геоданных, в которую будут записаны графические объекты. Этот параметр должен использоваться только в случае, если графические элементы веб-карты JSON должны постоянно сохраняться. Чаще всего этот параметр не нужен, т.к. для хранения графических объектов будет использоваться находящаяся в памяти компьютера временная рабочая область. Этот параметр позволяет сохранять графические объекты во временное хранилище, в случае если вы планируете использовать документ карты для осуществления операций, требующих сохранения на диск или загрузки с диска (например, для упаковки и сбора данных). Путь должен заканчиваться расширениями .gdb или .sde. (Значение по умолчанию — None) | String |
extra_conversion_options | Словарь учетных данных защищенных сервисов. Этот параметр требуется, если сервисы в веб-карте JSON запрашивают имя пользователя и пароль для просмотра. Поддерживаются следующие ключи словаря:
Примером пары "ключ–значение" может служить:
Списки файлов подключения могут быть использованы при наличии нескольких защищенных сервисов:
(Значение по умолчанию — None) | Dictionary |
Возвращаемое значение
Тип данных | Объяснение |
tuple | Возвращает именованный кортеж Python веб-карты и запрашивает свойства:
|
Пример кода
ConvertWebMapToMapDocument пример 1
В этом примере скрипт считывает веб-карту JSON, выходной формат, шаблон документа карты и существующие документы PDF, к которым будет присоединена веб-карта. Выходной документ карты из функции ConvertWebMapToMapDocument экспортируется в PDF, затем включается в другой файл PDF с помощью класса PDFDocument.
import arcpy
import os
import uuid
# The template location in the server data store
templatePath = '//MyMachine/MyDataStore/WebMap'
# Input WebMap json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)
# Input Layout template
Layout_Template = arcpy.GetParameterAsText(1)
if Layout_Template == '#' or not Layout_Template:
Layout_Template = "Landscape11x17"
# PDF Title Page
PDF_Title = arcpy.GetParameterAsText(2)
if PDF_Title == '#' or not PDF_Title:
PDF_Title = "TitlePage.PDF"
# PDF End Page
PDF_End = arcpy.GetParameterAsText(3)
if PDF_End == '#' or not PDF_End:
PDF_End = "ContactInfo.PDF"
# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')
# Get the requested PDF files
PDF_Title_File = os.path.join(templatePath, PDF_Title)
PDF_End_File = os.path.join(templatePath, PDF_End)
# Convert the WebMap to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON,
templateMxd)
mxd = result.mapDocument
# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
WebMapPDF = os.path.join(arcpy.env.scratchFolder,
'WebMap_{}.pdf'.format(str(uuid.uuid1())))
# Export the WebMap to PDF
arcpy.mapping.ExportToPDF(mxd, WebMapPDF)
# Create a new "master" output PDF Document
# Append Title, WebMap and End PDFs to it
Output_Name = os.path.join(arcpy.env.scratchFolder,
'OutputWithWebMap_{}.pdf'.format(str(uuid.uuid1())))
pdfDoc = arcpy.mapping.PDFDocumentCreate(Output_Name)
pdfDoc.appendPages(PDF_Title_File)
pdfDoc.appendPages(WebMapPDF)
pdfDoc.appendPages(PDF_End_File)
pdfDoc.saveAndClose()
# Set the output parameter to be the output PDF
arcpy.SetParameterAsText(4, Output_Name)
# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 2
В этом примере, инструмент геообработки ConsolidateMap используется для получения постоянной копии выходного документа карты, включая наложенные заметки.
import arcpy
import os
import uuid
# The template location in the registered folder
templatePath = '//MyMachine/Austin/WebMap'
# Input web map 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 = "Landscape11x17"
# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')
# Since we are making a permanent copy of the notes overlays,
# we need to specify a notes geodatabase
notes = os.path.join(arcpy.env.scratchFolder, 'mynotes.gdb')
# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd, notes)
mxd = result.mapDocument
# Save the web map and notes overlays to a new map document using ConsolidateMap
arcpy.ConsolidateMap_management(mxd.filePath,
os.path.join(arcpy.env.scratchFolder, 'ConsolidateWebMap'))
# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 3
В этом примере используется промежуточный шаблон документа карты, который содержит векторные эквиваленты всех возможных сервисных слоев. После выполнения функции ConvertWebMapToMapDocument, скрипт просматривает все слои выходного документа карты и удаляет все слои, кроме векторных, которые соответствуют сервисным слоям в веб-карте JSON. Затем компоновка выходного документа карты экспортируется в PDF или PNG.
import arcpy
import os
import uuid
# The template location in the registered folder
templatePath = '//MyComputerName/MyDataStore/USA'
# Input web map 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 = "NorthwesternUSA"
# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')
# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument
# Reference the data frame that contains the web map
# Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]
# Get a list of all service layer names in the map
serviceLayersNames = [slyr.name for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df)
if slyr.isServiceLayer and slyr.visible and not slyr.isGroupLayer]
# Create a list of all possible vector layer names in the map that could have a
# corresponding service layer
vectorLayersNames = [vlyr.name for vlyr in arcpy.mapping.ListLayers(mxd, data_frame=df)
if not vlyr.isServiceLayer and not vlyr.isGroupLayer]
# Get a list of all vector layers that don't have a corresponding service layer
removeLayerNameList = [vlyrName for vlyrName in vectorLayersNames
if vlyrName not in serviceLayersNames]
# Remove all vector layers that don't have a corresponding service layer
for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
if not lyr.isGroupLayer \
and not lyr.isServiceLayer \
and lyr.name in removeLayerNameList \
and lyr.name in vectorLayersNames:
arcpy.mapping.RemoveLayer(df, lyr)
# Remove all service layers
# This will leave only vector layers that had corresponding service layers
for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
if slyr.isServiceLayer:
arcpy.mapping.RemoveLayer(df, slyr)
# 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 web map
if Format.lower() == 'pdf':
arcpy.mapping.ExportToPDF(mxd, Output_File)
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(3, Output_File)
# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 4
В этом примере используется промежуточный шаблон документа карты, который содержит векторные эквиваленты всех возможных сервисных слоев. После выполнения функции ConvertWebMapToMapDocument, скрипт просматривает все слои выходного документа карты и удаляет все слои, кроме векторных, которые соответствуют сервисным слоям в веб-карте JSON. Вид данных для выходного документа карты затем экспортируется в PNG, используя значения DPI, выходной высоты и выходной ширины, возвращенные функцией ConvertWebMapToMapDocument, как указано в веб-приложении.
import arcpy
import os
import uuid
# Input web map json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)
# The template location in the registered folder
templatePath = '//MyComputerName/MyDataStore/FederalLands'
# Get the template map document
templateMxd = os.path.join(templatePath, 'FederalLands.mxd')
# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument
# Reference the data frame that contains the web map
# Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]
# Get a list of all service layer names in the map
serviceLayersNames = [slyr.name for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df)
if slyr.isServiceLayer and slyr.visible and not slyr.isGroupLayer]
# Create a list of all possible vector layer names in the map that could have a
# corresponding service layer
vectorLayersNames = [vlyr.name for vlyr in arcpy.mapping.ListLayers(mxd, data_frame=df)
if not vlyr.isServiceLayer and not vlyr.isGroupLayer]
# Get a list of all vector layers that don't have a corresponding service layer
removeLayerNameList = [vlyrName for vlyrName in vectorLayersNames
if vlyrName not in serviceLayersNames]
# Remove all vector layers that don't have a corresponding service layer
for lyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
if not lyr.isGroupLayer \
and not lyr.isServiceLayer \
and lyr.name in removeLayerNameList \
and lyr.name in vectorLayersNames:
arcpy.mapping.RemoveLayer(df, lyr)
# Remove all service layers
# This will leave only vector layers that had corresponding service layers
for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
if slyr.isServiceLayer:
arcpy.mapping.RemoveLayer(df, slyr)
# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
output = 'WebMap_{}.png'.format(str(uuid.uuid1()))
Output_File = os.path.join(arcpy.env.scratchFolder, output)
# Export the web map
arcpy.mapping.ExportToPNG(mxd, Output_File, df, result.outputSizeWidth,
result.outputSizeHeight, result.DPI)
# 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)
ConvertWebMapToMapDocument пример 5
В этом примере пользователь предоставляет диапазон страниц, который соответствует многостраничной компоновке (Data Driven Pages) в шаблоне документа карты. Этот диапазон страниц затем экспортируется в многостраничный документ PDF.
import arcpy
import os
import uuid
# The template location in the registered folder
templatePath = '//MyComputerName/MyDataStore/WebMap'
# Input WebMap json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)
# Data Driven Page numbers as comma delimited string
DDP_Pages = arcpy.GetParameterAsText(1)
if DDP_Pages == '#' or not DDP_Pages:
DDP_Pages = "1, 3, 10-13"
# Get the template map document
templateMxd = os.path.join(templatePath, 'DDP.mxd')
# Convert the WebMap to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON,
templateMxd)
mxd = result.mapDocument
# Use the uuid module to generate a GUID as part of the output name
# This will ensure a unique output name
Output_Name = os.path.join(arcpy.env.scratchFolder,
'WebMap_{}.pdf'.format(str(uuid.uuid1())))
# Export the WebMap Data Driven Pages to PDF
mxd.dataDrivenPages.exportToPDF(Output_Name, "RANGE", DDP_Pages)
# Set the output parameter to be the output PDF
arcpy.SetParameterAsText(2, Output_Name)
# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)
ConvertWebMapToMapDocument пример 6
В этом примере, функция updateLayerFromJSON из класса Layer используется для обновления свойств (например, символов) промежуточного векторного слоя в шаблоне mxd с определением динамического слоя из JSON веб-карты. Это удобно, если веб-приложение позволяет менять символы динамических слоев, и вы хотите заменить слои сервиса на промежуточные векторные данные, но все еще видите обновленные символы из веб-приложения.
import arcpy
import os
import uuid
import json
# The template location in the server data store
templatePath = '//MyMachine/MyDataStore/WebMap'
# Input WebMap json
Web_Map_as_JSON = arcpy.GetParameterAsText(0)
# Input Layout template
Layout_Template = arcpy.GetParameterAsText(1)
if Layout_Template == '#' or not Layout_Template:
Layout_Template = "Landscape11x17"
# Get the requested map document
templateMxd = os.path.join(templatePath, Layout_Template + '.mxd')
# Convert the web map to a map document
result = arcpy.mapping.ConvertWebMapToMapDocument(Web_Map_as_JSON, templateMxd)
mxd = result.mapDocument
# Reference the data frame that contains the web map
# Note: ConvertWebMapToMapDocument renames the active dataframe in the template_mxd to "Webmap"
df = arcpy.mapping.ListDataFrames(mxd, 'Webmap')[0]
# Reference the staged vector data that corresponds to the dynamic layer in the JSON
# This is the layer that will get updated based on the layer definition in the JSON
lyr = arcpy.mapping.ListLayers(mxd, "U.S. States (Generalized)", df)[0]
# Read the JSON and extract the layer definition
# In this case we have hardcoded it to second operational layer
data = json.loads(Web_Map_as_JSON)
layerDefinition = data["operationalLayers"][1]["layerDefinition"]
# Update the staged vector layer with the layer definition (e.g. renderer info) from the JSON
lyr.updateLayerFromJSON(layerDefinition)
# Remove all service layers. This will leave only staged vector layers.
for slyr in arcpy.mapping.ListLayers(mxd, data_frame=df):
if slyr.isServiceLayer:
arcpy.mapping.RemoveLayer(df, slyr)
# 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 web map
arcpy.mapping.ExportToPDF(mxd, Output_File)
# Set the output parameter to be the output file of the server job
arcpy.SetParameterAsText(2, Output_File)
# Clean up - delete the map document reference
filePath = mxd.filePath
del mxd, result
os.remove(filePath)