Wstawianie nowych linii w elementach tekstu prostokątnego za pomocą ArcPy powoduje nakładanie się?

10

Pewnego dnia natknąłem się na problem, gdy próbowałem użyć modułu mapowania ArcPy do edycji prostokątnych elementów tekstowych z nowymi liniami (\ n) w dokumencie ArcMap. Oto jak wyglądało wyjście:

wprowadź opis zdjęcia tutaj

Oto kod, którego użyłem do wygenerowania tego wyniku. Pierwsza kolumna to prostokątne elementy tekstowe Text1, Text2, Text3; druga kolumna to „zwykłe” elementy tekstowe Text4, Text5 i Text6 idące w dół.

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)

Jak dotąd wygląda na to, że obecność pomieszanego tekstu zależy od tego, czy linia jest wystarczająco długa, aby ją zawinąć i czy linia przed nową linią jest dłuższa niż linia po nowej linii.

Jakieś pomysły na to, co może pójść nie tak? Czy jest w pobliżu praca? Mógłbym używać zwykłego tekstu i martwić się o zawijanie linii za pomocą Pythona, ale mam nadzieję, że coś wymyślę.

dmahr
źródło
1
Czy masz zainstalowany najnowszy dodatek Service Pack?
Jason Scheirer

Odpowiedzi:

10

Na to też wpadłem. Dzieje się tak, ponieważ ArcGIS wymaga zakończenia linii Windows, które są zarówno znakiem powrotu karetki, jak i linią. Trochę bólu. Na szczęście łatwo się poruszać. W Pythonie zamiast zamiast \n(czyli linefeed - zobacz dokumentację Pythona, jeśli chcesz), użyj \r\n.

om_henners
źródło
2

Myślę, że łatwiej jest użyć modułu zawijania tekstu:

Wyrażenie etykiety Python:

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

I powstałe etykiety mają rozdzielone zwroty karetki przy dowolnej wybranej szerokości znaku.

wprowadź opis zdjęcia tutaj

Crmackey
źródło