TextElement (arcpy.mapping)
Резюме
Объект TextElement обеспечивает доступ к свойствам и методам, которые разрешают изменение его положения на странице компоновки, а также изменение текстовой строки и размера шрифта.
Обсуждение
Объект TextElement отображает текст, включенный в компоновку страницы. Он включает такие элементы, как текст, выноски, текст в прямоугольнике, заголовки и т.д. Он также включает текстовые строки, сгруппированные в составной элемент. Он не включает текстовые строки, которые являются частью легенды или вставленной таблицы. Функция ListLayoutElements возвращает список Python с объектами элементов компоновки страницы. Затем необходимо пройти по всем элементами списка в цикле или указать номер индекса для ссылки на определенный объект элемента страницы. Чтобы только получить список TextElements, используйте константу TEXT_ELEMENT с параметром element_type. Подстановочные знаки также могут использоваться для поиска по имени элемента.
Имеющиеся текстовые элементы можно копировать и удалять. Эта возможность была добавлена для поддержки создания динамических графических таблиц. Для этого, документ карты должен содержать текстовые элементы с соответствующими символами. Если имена столбцов имеют другие параметры текста, чем значения ячеек, необходимо создать как минимум два текстовых элемента. При чтении информации из таблицы, текст может копироваться с помощью метода clone, и располагаться и меняться в размерах в соответствии со свойствами других текстовых элементов. При клонировании элемента, очень удобно использовать значение suffix, чтобы клонированные элементы можно было бы легко определить с помощью функции ListLayoutElements со значениями wildcard и тем же самым suffix. Возвращенный список элементов затем можно отредактировать или удалить, с помощью метода delete.
Чтобы увидеть полный пример кода для создания динамических графических таблиц, основанных на записях в классе объектов, см. пример кода в справке по классу GraphicElement.
Кроме того, TextElement отличается от всех остальных элементов страницы тем, что имеет свойство text. Это свойство, которое служит для чтения и редактирования строк. Один из примеров – выполнение операции поиска и замены во всех текстовых элементах на странице компоновки. Так же, как и в интерфейсе ArcMap, текстовая строка не может быть пустой; она должна содержать хотя бы один пробел, например, textElm.text = " ", а не textElm.text = "".
Настоятельно рекомендуется присваивать каждому элементу страницы компоновки уникальное имя, чтобы их можно было легко изолировать с помощью скриптов ArcPy. Положения X и Y элемента основаны на положении якоря элемента, который также задается на закладке Размер и положение (Size and Position) диалогового окна свойств элемента в ArcMap.
Свойства
Свойство | Объяснение | Тип данных |
elementHeight (чтение и запись) |
Высота элемента в единицах страницы. Единицы измерения задаются или считываются в единицах страницы. | Double |
elementPositionX (чтение и запись) |
Положение Х якоря элемента во фрейме данных. Единицы измерения задаются или считываются в единицах страницы. | Double |
elementPositionY (чтение и запись) |
Положение Y якоря элемента во фрейме данных. Единицы измерения задаются или считываются в единицах страницы. | Double |
elementWidth (чтение и запись) |
Ширина элемента в единицах страницы. Единицы измерения задаются или считываются в единицах страницы. | Double |
fontSize (чтение и запись) |
Размер шрифта элемента в единицах страницы. | Double |
name (чтение и запись) |
Имя элемента. | String |
text (чтение и запись) |
Строка текста, связанная с элементом. | String |
type (только чтение) |
Возвращает тип любого элемента на странице компоновки.
| String |
Обзор метода
Метод | Объяснение |
clone ({suffix}) |
Обеспечивает механизм клонирования существующего графического текста на странице компоновки. |
delete () |
Обеспечивает механизм удаления существующего текстового элемента на странице компоновки. |
Методы
Параметр | Объяснение | Тип данных |
suffix |
Дополнительная строка, использующаяся для добавления тега к созданным текстовым элементам. Новый элемент получит имя родительского элемента, суффикс и числовой секвенсер. К примеру, если имя родительского элемента – FieldLabel, суффикс – _copy, вновь созданные элементы будут названы FieldLabel_copy, FieldLabel_copy_1, FieldLabel_copy_2 и т.д. Если суффикс отсутствует, имена будут следующими: FieldLabel_1, FieldLabel_2, FieldLabel_3 и т.д. | String |
Сгруппированные текстовые элементы копировать нельзя. Все сгруппированные элементы являются графическими. Сначала проверьте, не является ли графический элемент групповым, с помощью свойства isGroup объекта GraphicElement.
Клонированные элементы бывает необходимо удалить. Клонированным элементам, при создании, можно присваивать собственный suffix, чтобы их можно было легко найти с помощью параметра wildcard функции ListLayoutElements.
Пример кода
Следующий скрипт заменяет все строки 2009 года на 2010.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
for elm in arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT"):
if elm.text == "2009":
elm.text = "2010"
mxd.save()
del mxd
Следующий скрипт обновляет статический текстовой элемент даты/времени в документе карты версии 9.3 на новый вариант динамической текстовой строки версии 10. Текущее время вставляется в новой строке под текущей датой. Текстовая строка задана с помощью нескольких различных методов Python. Все они приводят к одному результату.
import arcpy
mxd = arcpy.mapping.MapDocument(r"C:\Project\Project.mxd")
elm = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "DateTimeElm")[0]
#Concatenate the date and time with a new line character (\n) using single quotes so that double quotes are treated as part of the string.
elm.text = 'Date: <dyn type="date" format="short"/> \nTime: <dyn type="time" format=""/>'
#Use triple quotes and put the line break within the string.
elm.text = """Date: <dyn type="date" format="short"/>
Time: <dyn type="time" format=""/>"""
mxd.save()
del mxd
Следующий скрипт регулирует размер шрифта в соответствии с заданной шириной страницы. Он задает первоначальный размер в 100 точек и уменьшает его, пока не будет достигнута желаемая ширина строки. Текстовая строка задается как динамический текст, который отображает заголовок карты. Этот скрипт будет работать правильно, только если задано свойство title документа карты. Эго можно задать в Файл (File) > Свойства документа карты (Map Document Properties).
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
elm = arcpy.mapping.ListLayoutElements(mxd, "TEXT_ELEMENT", "MapTitle")[0]
elmWidth = 4.0
x = 100
elm.text = '<dyn type="document" property="title"/>'
elm.fontSize = x
while elm.elementWidth > float(elmWidth):
elm.fontSize = x
x = x - 1
arcpy.RefreshActiveView()
del mxd