Вставка новых строк в текстовые элементы Rectangle через ArcPy вызывает наложение?


10

Я столкнулся с проблемой на днях, когда попытался использовать модуль отображения ArcPy для редактирования прямоугольных текстовых элементов с символами новой строки (\ n) в документе ArcMap. Вот как выглядел вывод:

введите описание изображения здесь

Вот код, который я использовал для генерации этого вывода. Первый столбец - это прямоугольные текстовые элементы Text1, Text2, Text3, идущие вниз; второй столбец - это «простые» текстовые элементы Text4, Text5 и Text6, идущие вниз.

import os
import arcpy

HomeDir = r"C:\Desktop"
arcpy.env.workspace = HomeDir

CurrentMXD = arcpy.mapping.MapDocument(r"C:\Desktop\TextTest.mxd")
OutputFilename = r"C:\Desktop\TextTest.pdf"
if os.path.exists(OutputFilename):
    os.remove(OutputFilename)

for TextElement in arcpy.mapping.ListLayoutElements(CurrentMXD, "TEXT_ELEMENT"):
    TextElementName = TextElement.name

    String1 = "The quick brown fox jumped over the lazy dog.\nShe sells sea shells by the sea shore."
    String2 = "The quick brown fox \njumped over the lazy dog.\nShe sells sea shells by the sea shore."
    String3 = "The quick brown fox jumped \nover the lazy dog.\nShe sells sea shells by the sea shore."

    if TextElementName == "Text1":
        TextElement.text = String1
    if TextElementName == "Text2":
        TextElement.text = String2 
    if TextElementName == "Text3":
        TextElement.text = String3
    if TextElementName == "Text4":
        TextElement.text = String1
    if TextElementName == "Text5":
        TextElement.text = String2
    if TextElementName == "Text6":
        TextElement.text = String3

arcpy.mapping.ExportToPDF(CurrentMXD, OutputFilename)

Пока что похоже, что наличие испорченного текста зависит от того, достаточно ли длинна строка для переноса и длиннее ли строка до новой строки, чем строка после новой строки.

Есть идеи о том, что может пойти не так? Есть ли обходной путь? Я мог бы использовать простые текстовые элементы и беспокоиться о переносе строк с помощью Python, но я надеюсь, что смогу что-нибудь понять.


1
У вас установлен последний пакет обновления?
Джейсон Шейрер

Ответы:


10

Я столкнулся с этим также. Это связано с тем, что ArcGIS требует окончания строки Windows, которое является как переводом каретки, так и переводом строки. Немного боли. К счастью, это легко обойти. В Python вместо «просто» \n(перевод строки - смотрите документацию по Python, если хотите), используйте \r\n.


2

Я думаю, что проще использовать модуль textwrap:

Выражение метки Python:

def FindLabel ( [LEGAL1]  ):
  import textwrap
  return '\r\n'.join(textwrap.wrap([LEGAL1], 20)) #charcter width set at 20

И получающиеся надписи имеют разделенные возвраты каретки при любой ширине символа, которую вы выбрали.

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.