¿Insertar nuevas líneas en elementos de Texto Rectángulo a través de ArcPy causa superposición?

10

Me encontré con un problema el otro día cuando intenté usar el módulo de mapeo de ArcPy para editar elementos de texto de rectángulo con líneas nuevas (\ n) en un documento de ArcMap. Así es como se veía la salida:

ingrese la descripción de la imagen aquí

Aquí está el código que usé para generar esa salida. La primera columna son elementos de texto rectangulares Text1, Text2, Text3 que descienden; la segunda columna son elementos de texto "sin formato" Text4, Text5 y Text6 que van hacia abajo.

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)

Hasta ahora, parece que la presencia del texto desordenado depende de si la línea es lo suficientemente larga como para ajustarse, y si la línea antes de la nueva línea es más larga que la línea después de la nueva línea.

¿Alguna idea sobre lo que podría estar yendo mal? ¿Hay alguna solución? Podría usar elementos de texto sin formato y preocuparme por ajustar líneas usando Python, pero espero poder resolver algo.

dmahr
fuente
1
¿Tiene instalado el último service pack?
Jason Scheirer

Respuestas:

10

Me encontré con esto también. Esto se debe a que ArcGIS requiere terminaciones de línea de Windows que son tanto un retorno de carro como un avance de línea. Un poco de dolor. Afortunadamente es fácil moverse. En Python por en lugar de solo \n(que es salto de línea, vea los documentos de Python para obtener más información si está interesado), use \r\n.

om_henners
fuente
2

Creo que es más fácil usar el módulo textwrap:

Expresión de etiqueta de Python:

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

Y las etiquetas resultantes tienen retornos de carro divididos en el ancho de caracteres que elija.

ingrese la descripción de la imagen aquí

crmackey
fuente