摘要
TextElement 对象可用于对属性进行访问,这些属性可以在页面布局中重新定位文本以及修改文本字符串和字号。
讨论
TextElement 对象代表了页面布局中的插入文本。其中包括插入的文本、注释、矩形文本、标题等项目。还包括被编入组元素中的文本字符串。但不包括属于图例或插入表的一部分的文本字符串。ListLayoutElements 函数将返回页面布局元素对象的 Python 列表。随后需要遍历列表中的每个项目,或指定一个索引号以引用具体的页面元素对象。要仅返回 TextElements 的列表,element_type 参数应使用 TEXT_ELEMENT 常量。您可使用通配符根据元素名对搜索过程进行优化。
可以克隆和删除现有文本元素。添加此功能的初衷是为了支持创建动态图形表。要实现此功能,必须使用具有合适符号系统的文本元素制作一个地图文档。如果列字段名称与单元值之间的文本属性设置不同,则至少需要制作两个文本元素。从表格中读取信息后,可以使用 clone 方法克隆这些文本,使用其他文本元素属性调整其位置。克隆元素时,提供一个 suffix 值将会非常有用,因为在使用 ListLayoutElements 函数时如果结合 wildcard 和该 suffix 值,可以轻易识别出克隆的元素。可以使用 delete 方法进一步修改或删除返回的元素列表。
要查看有关如何根据要素类中的记录来创建动态图形表的完整代码实例,请参阅 GraphicElement 类帮助中提供的代码实例。
TextElement 与其他大多数页面元素不同之处是该元素具有 text 属性。使用此属性可以读取并修改字符串。一个常见示例是在页面布局中对所有文本元素执行搜索和替换操作。与 ArcMap 用户界面类似,文本字符串不可以为空字符串;至少须包括一个空格,例如 textElm.text = " ",而不能是 textElm.text = ""。
强烈推荐您为每个页面布局元素赋予唯一的名称,以便在使用 ArcPy 脚本时便于区分。元素位置 X 和 Y 以元素的锚点位置为基础;元素的锚点位置可通过 ArcMap 中元素属性对话框的大小和位置选项卡进行设置。
属性
属性 | 说明 | 数据类型 |
angle (可读写) | 元素的文本基线角度(以度为单位)。 | Double |
elementHeight (可读写) |
元素的高度(以页面单位计)。分配或报告的单位为页面单位。 | Double |
elementPositionX (可读写) | 数据框元素的锚点位置对应的 X 位置。分配或报告的单位为页面单位。 | Double |
elementPositionY (可读写) | 数据框元素的锚点位置对应的 Y 位置。分配或报告的单位为页面单位。 | Double |
elementWidth (可读写) |
元素的宽度(以页面单位计)。分配或报告的单位为页面单位。 | Double |
fontSize (可读写) |
元素的字体大小(以页面单位计)。 | Double |
name (可读写) | 元素的名称。 | String |
text (可读写) | 与元素相关联的文本字符串。 | String |
type (只读) | 返回任何给定页面布局元素的元素类型。
| String |
方法概述
方法 | 说明 |
clone ({suffix}) | 提供了一种克隆页面布局中现有图形文本的机制。 |
delete () | 提供了一种删除页面布局中现有文本元素的机制。 |
方法
clone ({suffix})
参数 | 说明 | 数据类型 |
suffix | 用于标记每个新建文本元素的可选字符串。新元素的元素名称为父项文本元素的元素名称加上后缀值以及数值定序符。例如,如果父元素名称为 FieldLabel 且后缀值为 _copy,则新克隆的元素的名称为 FieldLabel_copy、FieldLabel_copy_1、FieldLabel_copy_2 等。如果未提供后缀,则结果将类似于 FieldLabel_1、FieldLabel_2、FieldLabel_3 等。 | String |
分组的文本元素无法克隆。所有分组元素都是图形元素类型。首先使用 GraphicElement 对象中的 isGroup 属性检查图形元素是否分组。
delete ()
可能需要删除已克隆的元素。创建克隆元素时,可为克隆元素指定自定义后缀,因此可以通过在 ListLayoutElements 函数中使用通配符参数轻松找到这些元素。
代码示例
TextElement 示例 1
以下脚本将出现的 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
TextElement 示例 2
以下脚本将更新静态的 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
TextElement 示例 3
以下脚本将调整字符串的字体大小,以适合指定的页面宽度。该脚本首先将初始字体大小设置为 100 磅,然后将字体缩小,直到文本字符串适合所需宽度。文本字符串被设置为表示地图标题信息的动态文本。只有设置了地图文档的标题属性,此脚本才会正常运行。可在文件 > 地图文档属性中找到该属性。
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