Вставлення нових рядків у текстові елементи прямокутника через 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
У вас встановлений останній пакет послуг?
Jason Scheirer

Відповіді:


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.