Краткая информация
Предоставляет доступ к методам и свойствам для управления отдельными страницами документа карт с включенной многостраничной компоновкой.
Обсуждение
Серии карт можно создавать без скриптов с помощью набора инструментов Многостраничные компоновки (Data Driven Pages) в ArcMap. Можно сказать и наоборот: серии карт можно создать полностью с помощью скриптов arcpy.mapping без применения пользовательского интерфейса многостраничной компоновки в ArcMap, но есть причины для объединения обоих способов. Панель инструментов многостраничной компоновки ArcMap может не предоставлять достаточно опций для создания "идеальной" серии карт, но наследуемое поведение документа карта с поддержкой многостраничной компоновки может сэкономить множество строк кода, так как экстенты страницы, масштабы, динамический и текст и другое управляются в документе карты автоматически, и вам не нужно писать для этого код.
В качестве примера можно привести сценарий, в котором строковые данные текстового элемента нужно отформатировать с помощью пользовательской логики или сформировать на основе нескольких полей. Может быть необходимо реализовать все в arcpy.mapping просто из-за такого простого требования. В этом случае документ карты все равно можно создать с включенной многостраничной компоновки, а arcpy.mapping может обработать пользовательский текстовый элемент. В примере кода ниже представлен данный сценарий.
Для указания ссылки на многостраничные компоновки в arcpy.mapping их сначала нужно создать в документе карты (.mxd) с помощью панели инструментов многостраничной компоновки в ArcMap.
В классе DataDrivenPages всего один метод, exportToPDF, но это не значит, что нельзя создать другие файлы экспорта. См. первый пример кода ниже.
Дополнительную информацию о многостраничной компоновке см. в следующих разделах:
Свойства
Свойство | Объяснение | Тип данных |
currentPageID (чтение и запись) | Свойство currentPageID представляет активную или текущую страницу документа карты (.mxd) с включенной многостраничной компоновкой. Это значение отображается в панели инструментов многостраничной компоновки, если выбрана опция Показать страницу (Show Page). Оно представляет x от x от y. | Long |
dataFrame (только чтение) | Возвращает ссылку на фрейм данных, в котором расположен индексный слой в документе карты с многостраничной компоновкой. | DataFrame |
indexLayer (только чтение) | Возвращает ссылку на индексный слой в документе карты с многостраничной компоновкой. | Layer |
pageCount (только чтение) | Свойство pageCount возвращает общее число страниц документа карты (.mxd) с включенной многостраничной компоновкой. Это значение отображается в панели инструментов многостраничной компоновки, если выбрана опция Показать страницу (Show Page). Оно представляет y от x от y. | Long |
pageNameField (только чтение) | Возвращает объект поля, представляющий поле, используемое в классе индексных объектов при настройке многостраничной компоновки. | Field |
pageRow (только чтение) | Используйте pageRow для получения объекта строки индексного слоя для активной или текущей страницы. Поля индексного слоя можно читать и/или изменять при необходимости. | Row |
selectedPages (только чтение) | Возвращает список Python индексных номеров, представляющий выбранные объекты индексного слоя в документе карты с многостраничной компоновкой. | List |
Обзор метода
Метод | Объяснение |
exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {colorspace}, {compress_vectors}, {image_compression}, {picture_symbol}, {convert_markers}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {show_selection_symbology}) | Экспортирует указанные страницы в многостраничный документ PDF для документа карты (.mxd) с многостраничной компоновкой (Data Driven Pages) |
getPageIDFromName (page_name) | Возвращает значения индекса Многостраничной компоновки (Data Driven Pages) на основе имени страницы |
printPages ({printer_name}, {page_range_type}, {page_range_string}, {out_print_file}, {show_selection_symbology}) | Печатает указанные страницы из документа карты с Data Driven Pages (.mxd) на заданном принтере |
refresh () | Обновляет существующий набор Многостраничных компоновок (Data Driven Pages) |
Методы
exportToPDF (out_pdf, {page_range_type}, {page_range_string}, {multiple_files}, {resolution}, {image_quality}, {colorspace}, {compress_vectors}, {image_compression}, {picture_symbol}, {convert_markers}, {embed_fonts}, {layers_attributes}, {georef_info}, {jpeg_compression_quality}, {show_selection_symbology})
Параметр | Объяснение | Тип данных |
out_pdf | Строка, представляющая путь и имя выходного файла для экспорта. | String |
page_range_type | Строковое значение, указывающее, как страницы будут печататься (аналогично закладке Страницы (Pages) в диалоговом окне Экспорт карты (Export Map) ArcMap для документов PDF.
(Значение по умолчанию — ALL) | String |
page_range_string | Строка, определяющая страницы для печати, если используется опция RANGE в параметре page_range_type (например, 1, 3, 5-12). | String |
multiple_files | Опция для управления созданием PDF. По умолчанию все страницы экспортируются в один многостраничный документ. Можно также выбрать экспорт в отдельные одностраничные документы PDF с помощью двух различных опций.
(Значение по умолчанию — PDF_SINGLE_FILE) | String |
resolution | Целое число, определяющее разрешение файла для экспорта в точках на дюйм (dpi). (Значение по умолчанию — 300) | Integer |
image_quality | Строка, определяющая качество выходного изображения.
(Значение по умолчанию — BEST) | String |
colorspace | Строка, определяющая пространство цвета файла для экспорта.
(Значение по умолчанию — RGB) | String |
compress_vectors | Логический параметр, управляющий сжатием векторных и текстовых частей выходного файла. Сжатие изображения определяется отдельно. (Значение по умолчанию — True) | Boolean |
image_compression | Строка, которая определяет схему сжатия, используемую для сжатия изображения или растровых данных в выходном файле.
(Значение по умолчанию — ADAPTIVE) | String |
picture_symbol | Строка, определяющая, будут ли маркеры-рисунки и заполнения рисунком преобразованы в векторные или растровые данные.
(Значение по умолчанию — RASTERIZE_BITMAP) | String |
convert_markers | Логический параметр, управляющий преобразованием символов маркеров на основе символов в полигоны. Позволяет правильно отображать символы, если шрифт символов недоступен или не может быть внедрен. Но если установить для этого параметра значение True, внедрение шрифта отключается для всех маркеров символов на основе текстовых символов, что может привести к изменению их внешнего вида. (Значение по умолчанию — False) | Boolean |
embed_fonts | Логический параметр, управляющий внедрением шрифтов в файле для экспорта. Внедрение шрифтов позволяет правильно отображать текстовые и символьные маркеры при просмотре документа на компьютере без установленных шрифтов. (Значение по умолчанию — True) | Boolean |
layers_attributes | Строка, управляющая включением слоя PDF и данных объектов PDF (атрибутов) в файл для экспорта.
(Значение по умолчанию — LAYERS_ONLY) | String |
georef_info | Логический параметр, позволяющий экспортировать информацию о системе координат каждого фрейма данных в выходной файл PDF. (Значение по умолчанию — True) | Boolean |
jpeg_compression_quality | Число, управляющее качеством сжатия, если для параметра image_compression задано значение ADAPTIVE или JPEG. Допустимый диапазон: от 1 до 100. Если значение jpeg_compression_quality равно 100, это обеспечивает наилучшее качество изображений, но при экспорте создаются крупные файлы. Рекомендованный диапазон находится между 70 и 90. (Значение по умолчанию — 80) | Integer |
show_selection_symbology | Логический параметр, управляющие тем, следует ли отображать символы выборки в выходных данных. (Значение по умолчанию — False) | Boolean |
Многостраничные компоновки экспортируются в многостраничный документ PDF. В документе карты должна быть включена многостраничная компоновка. PDF формат создан с учетом возможности работы на разных платформах. Эти файлы часто используются для распространения документов через Интернет и становятся стандартным форматом для обмена документацией. Файлы ArcMap PDF можно редактировать во многих графических приложениях, здесь сохраняются аннотации, надписи и данные атрибутов слоев карты из таблицы содержания ArcMap. Экспорт PDF из ArcMap поддерживает встроенные шрифты, поэтому даже если у пользователей не установлены шрифты Esri, символы все равно будут отображаться корректно. При экспорте из ArcMap в PDF можно задавать цвета в значениях CMYK или RGB.
Подробное описание экспорта карт см. в разделе Экспорт карты в справке ArcGIS for Desktop.
getPageIDFromName (page_name)
Параметр | Объяснение | Тип данных |
page_name | Значение в индексном слое, соответствующее полю Имя (Name), которое использовалось при создании Многостраничной компоновки (Data Driven Pages) | String |
Многие свойства и методы Многостраничной компоновки используют внутреннее значение индекса, а не буквенные имена страниц, которые использовались при создании индексного слоя. Значения индекса автоматически генерируются на основе полей Имя (Name) и Сортировать (Sort). Иногда бывает трудно понять, какое значение индекса представляет данную страницу. Метод getPageIDFromName позволяет соотнести индекс с именем.
pageID = mxd.dataDrivenPages.getPageIDFromName("HarborView")
mxd.dataDrivenPages.currentPageID = pageID
printPages ({printer_name}, {page_range_type}, {page_range_string}, {out_print_file}, {show_selection_symbology})
Параметр | Объяснение | Тип данных |
printer_name | Строка, представляющая имя принтера на локальном компьютере. (Значение по умолчанию — None) | String |
page_range_type | Строковое значение, указывающее, как страницы будут печататься (аналогично закладке Страницы (Pages) в диалоговом окне Экспорт карты (Export Map) ArcMap для документов PDF.
(Значение по умолчанию — ALL) | String |
page_range_string | Строка, определяющая страницы для печати, если используется опция RANGE в параметре page_range_type (например, 1, 3, 5-12). | String |
out_print_file | Часть, содержащая имя выходного файла для печати. Создаваемый формат зависит от принтера. Если вы используете принтер PostScript, форматом будет PostScript, при этом рекомендуется указать расширение .ps. Если вы используете принтер Windows, укажите расширение .prn. (Значение по умолчанию — None) | String |
show_selection_symbology | Логический параметр, управляющие тем, следует ли отображать символы выборки в выходных данных. (Значение по умолчанию — False) | Boolean |
Функция ListPrinterNames() позволяет легко получить строку для параметра printer_name.
Следующий скрипт печатает определенный набор многостраничных компоновок на локальном принтере:
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
mxd.dataDrivenPages.printPages(r"\\olyfile\OLYCanon", "RANGE", "1,3,5-12")
refresh ()
Метод обновления понадобится вам в следующих случаях: (1) в индексный слой добавлены или из индексного слоя удалены объекты; (2) в значения полей Сортировать (Sort) или Имя (Name) внесены изменения; (3) экстент фрейма данных изменен в результате смещения изображения или изменения масштаба карты или (4) изменено какое-либо поле, используемое Многостраничной компоновкой для объекта индексного слоя, на основании которого определяется текущий географический экстент. До тех пор, пока вы не примените метод обновления, Многостраничная компоновка будет сохранять в этих случаях исходный набор настроек.
Пример кода
Пример DataDrivenPages 1
Следующий скрипт экспортирует каждую страницу серии многостраничных компоновок в отдельный PNG-файл.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
for pageNum in range(1, mxd.dataDrivenPages.pageCount + 1):
mxd.dataDrivenPages.currentPageID = pageNum
print "Exporting page {0} of {1}".format(str(mxd.dataDrivenPages.currentPageID), str(mxd.dataDrivenPages.pageCount))
arcpy.mapping.ExportToPNG(mxd, r"C:\Project\OutPut\ParcelAtlas_Page" + str(pageNum) + ".png")
del mxd
Пример DataDrivenPages 2
Следующий скрипт печатает только набор страниц карты с помощью списка имен страниц, а также изменяет текстовый элемент названия страницы с помощью логики, что можно реализовать только с использованием скриптов (другими словами, строка названия создается на основе значения атрибута). Скрипт проходит в цикле по каждой именованной странице и задает параметр currentPageID соответствующим образом. Затем он извлекает значение из поля в слое индексов с именем TRS. Затем обрабатываются значения, удаляются передние нули, формируется текстовый элемент строки названия, а результаты передаются на принтер.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
pageNameList = ["MPB", "PJB", "AFB", "ABB"]
for pageName in pageNameList:
pageID = mxd.dataDrivenPages.getPageIDFromName(pageName)
mxd.dataDrivenPages.currentPageID = pageID
fieldValue = mxd.dataDrivenPages.pageRow.TSR #example values from a field called TSR are "080102", "031400"
TRSTitle = arcpy.mapping.ListLayoutElements(MXD, "TEXT_ELEMENT", "TRSTitle")[0]
township, range, section = fieldValue[:2].strip("0"), fieldValue[2:-2].strip("0"), fieldValue[-2:].strip("0")
if section != "":
TRSTitle.text = "Section {0} T.{1}N. R.{2}W. W.M.".format(section, township, range)
else:
TRSTitle.text = "T.{0}N. R.{1}W. W.M.".format(township, range)
mxd.dataDrivenPages.printPages(r"\\olyfile\SUITE_303", "CURRENT")
del mxd
Пример DataDrivenPages 3
Следующий скрипт экспортирует только страницы с выбранными индексами (1-10) в отдельные файлы PDF. К имени полученных файлов PDF будет добавлен номер индекса.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\ParcelAtlas.mxd")
ddp = mxd.dataDrivenPages
indexLayer = ddp.indexLayer
arcpy.SelectLayerByAttribute_management(indexLayer, "NEW_SELECTION",
'"PageNumber" >= 1 AND "PageNumber" <= 10')
for indexPage in ddp.selectedPages:
ddp.currentPageID = indexPage
ddp.exportToPDF(r"C:\Project\Output\Page" + str(indexPage) + ".pdf", "CURRENT")
del mxd