TextElement

Краткая информация

Объект TextElement обеспечивает доступ к свойствам, которые разрешают изменение его положения в компоновке страницы, а также изменение текстовой строки и размера шрифта.

Обсуждение

Объект TextElement отображает текст, включенный в компоновку страницы. Он включает такие элементы, как текст, выноски, текст в прямоугольнике, заголовки и т.д. Он также включает текстовые строки в групповом элементе. Он не включает текстовые строки, которые являются частью легенды или вставленной таблицы. Метод listElements для объекта Layout возвращает список Python объектов элементов компоновки страницы. Затем необходимо пройти по всем элементами списка в цикле или указать номер индекса для ссылки на определенный объект элемента страницы. Чтобы получить список только элементов TextElements, используйте константу TEXT_ELEMENT для параметра elementType. wildcard также может быть использована для дальнейшей настройки поиска на основе элемента name. Важно давать каждому элементу компоновки страницы уникальное имя, чтобы их можно было легко изолировать с помощью скриптов ArcPy.

Кроме того, TextElement отличается от всех остальных элементов страницы тем, что имеет свойство text. С помощью этого свойства можно изменять строки.

Текстовые элементы можно клонировать и удалять. Эта возможность была добавлена для поддержки создания динамических графических таблиц. Для этого компоновка должна быть создана предварительно с уникальным набором текстовых элементов, каждый из которых имеет соответствующие символы. Например, если имена столбцов имеют отличные от значений ячеек настройки свойств текста, то необходимо создать два текстовых элемента, по одному на каждый стиль текста. При чтении информации из таблицы, текстовый элемент можно клонировать с помощью метода clone и расположить соответствующим образом в компоновке с помощью других свойств позиционирования текста. При клонировании элемента удобно использовать значение suffix, чтобы клонированные элементы можно было легко определить с помощью функции listElements со значениями wildcard и тем же suffix. Возвращенный список элементов затем можно отредактировать или удалить с помощью метода delete.

Значения elementPositionX и elementPositionY базируются на положении якорной точки элемента, которое задано на контекстной вкладке Формат в ArcGIS Pro.

Важно понимать разницу между режимами elementRotation и textAngle. Наилучшим примером будет вставленный текст в прямоугольнике. Свойства elementRotation отвечают за поворот прямоугольника, в то время как свойства textAngle контролируют угол текста в прямоугольнике. Для точечного текста оба значения синхронизированы вне зависимости от того, какой из свойств задано.

Свойства

СвойствоОписаниеТип данных
elementHeight
(чтение и запись)

Высота элемента в единицах страницы.

Double
elementPositionX
(чтение и запись)

x-положение позиции точки якоря элемента. Единицы измерения задаются или считываются в единицах страницы.

Double
elementPositionY
(чтение и запись)

y-положение позиции точки якоря элемента. Единицы измерения задаются или считываются в единицах страницы.

Double
elementRotation
(чтение и запись)

Угол поворота элемента в градусах. Положительные значения поворачивают по часовой стрелке, а отрицательные – против часовой стрелки.

Double
elementWidth
(чтение и запись)

Ширина элемента в единицах страницы.

Double
locked
(чтение и запись)

Если установлено значение True, элемент нельзя выбрать графически в виде компоновки.

Boolean
name
(чтение и запись)

Имя элемента. Важно, чтобы все элементы имели уникальное имя, благодаря чему на них было бы легко ссылаться по имени.

String
text
(чтение и запись)

Текстовая строка, связанная с элементом.

String
textAngle
(чтение и запись)

Угол в градусах, на который поворачивается текстовая строка. Положительные значения поворачивают по часовой стрелке, а отрицательные – против часовой стрелки.

Double
textSize
(чтение и запись)

Размер текста элемента в точках.

Double
type
(только чтение)

Возвращает значение TEXT_ELEMENT.

String
visible
(чтение и запись)

Возвращает True, если элемент является видимым в компоновке. Вместо того, чтобы перемещать ненужные объекты со страницы перед печатью или экспортом, вы можете включать и выключать видимость элемента.

Boolean

Обзор метода

МетодОписание
clone ({suffix})

Предоставляет механизм для клонирования существующего текстового элемента в компоновке страницы.

delete ()

Обеспечивает механизм удаления существующего текстового элемента на странице компоновки.

Методы

clone ({suffix})
ПараметрОписаниеТип данных
suffix

Дополнительная строка, использующаяся для добавления тега к созданным текстовым элементам. Новый элемент получает имя родительского элемента, суффикс и числовой секвенсер. Например, если имя родительского элемента FieldLabel и у suffix значение равно _copy, клонированные элементы будут называться FieldLabel_copy, FieldLabel_copy_1, FieldLabel_copy_2 и т.п. А если suffix не указан, результаты будут выглядеть как FieldLabel_1, FieldLabel_2, FieldLabel_3 и т.п.

String

Сгруппированные текстовые элементы копировать нельзя. Все сгруппированные элементы являются графическими. Проверьте, не является ли графический элемент групповым, с помощью свойства isGroup объекта GraphicElement.

delete ()

Может понадобиться удалить существующие или клонированные текстовые элементы. Клонированным элементам при создании можно присваивать собственный suffix, чтобы их можно было легко найти с помощью параметра wildcard для метода listElements на объекте Layout .

Пример кода

Пример 1 TextElement

Следующий скрипт заменяет все строки 2013 года на 2014.

import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")
for lyt in aprx.listLayouts():
    for elm in lyt.listElements("TEXT_ELEMENT"):
        if elm.text == "2013":
            elm.text = "2014"
aprx.save()
del aprx
Пример 2 TextElement

Этот скрипт строит графическую таблицу, основанную на значениях данных из таблицы в карте. Компоновка был создана с вертикальной линией с именем vertLine, горизонтальной линией с именем horzLine и текстовым элементом cellText. Каждый из этих элементов был создан с необходимыми свойствами символов и текста. Якори элементов установлены в верхнем левом положении, а вертикальное и горизонтальное выравнивание текстового элемента – вверх и влево.

import arcpy
aprx = arcpy.mp.ArcGISProject(r"C:\Projects\YosemiteNP\Yosemite.aprx")

#Reference items in the project
m = aprx.listMaps("Yosemite National Park")[0]
lyr = m.listLayers("Valley_Pts")[0]
lyt = aprx.listLayouts("Points of Interest")[0]
horzLine = lyt.listElements("GRAPHIC_ELEMENT", "horzLine")[0]
vertLine = lyt.listElements("GRAPHIC_ELEMENT", "vertLine")[0]
tableText = lyt.listElements("TEXT_ELEMENT", "cellText")[0]

#Get/set information about the table
numRows = int(arcpy.GetCount_management(lyr).getOutput(0))
rowHeight = 0.2
fieldNames = ["COMPLEXID", "NAME"]
numColumns = len(fieldNames)
colWidth = 1.5

#Build graphic table lines based on upper left coordinate
#  set the proper size of the original, parent line, then clone it and position appropriately
upperX = 1.0
upperY = 5.0

#Vertical lines
vertLine.elementPositionX = upperX
vertLine.elementPositionY = upperY
vertLine.elementHeight =  (rowHeight * numRows) + rowHeight #extra line for column names

x = upperX
for vert in range(1, numColumns+1):
  x = x + colWidth
  vert_clone = vertLine.clone("_clone")
  vert_clone.elementPositionX = x

#Horizontal lines
horzLine.elementPositionX = upperX
horzLine.elementPositionY = upperY
horzLine.elementWidth = numColumns * colWidth

y = upperY - rowHeight
for horz in range(1, numRows +2 ):  #need to accommodate the extra line for field names
  temp_horz = horzLine.clone("_clone")
  temp_horz.elementPositionY = y
  y = y - rowHeight

#Place text column names
tableText.elementPositionX = upperX + 0.05 #slight offset
tableText.elementPositionY = upperY
tableText.text = fieldNames[0]
accumWidth = colWidth
for field in range(1, numColumns):
  newFieldTxt = tableText.clone("_clone")
  newFieldTxt.text = fieldNames[field]
  newFieldTxt.elementPositionX = newFieldTxt.elementPositionX + accumWidth
  accumWidth = accumWidth + colWidth

#Create text elements based on values from the table
table = arcpy.SearchCursor(lyr.dataSource)
y = upperY - rowHeight
for row in table:
  x = upperX + 0.05 #slight offset
  try:   
    for field in fieldNames:
      newCellTxt = tableText.clone("_clone")
      newCellTxt.text = row.getValue(field)
      newCellTxt.elementPositionX = x
      newCellTxt.elementPositionY = y
      accumWidth = accumWidth + colWidth
      x = x + colWidth
    y = y - rowHeight
  except:
    print("Invalid value assignment")

#Export to PDF and delete cloned elements
lyt.exportToPDF(r"C:\Temp\test.pdf")

for elm in lyt.listElements(wildcard="_clone"):
  elm.delete()
del aprx