L'inserimento di nuove righe negli elementi Rectangle Text tramite ArcPy provoca la sovrapposizione?


10

Mi sono imbattuto in un problema l'altro giorno quando ho provato a utilizzare il modulo di mappatura di ArcPy per modificare elementi di testo rettangolari con newline (\ n) in un documento ArcMap. Ecco come appariva l'output:

inserisci qui la descrizione dell'immagine

Ecco il codice che ho usato per generare quell'output. La prima colonna contiene elementi di testo rettangolari Testo1, Testo2, Testo3 che scendono; la seconda colonna contiene elementi di testo "normali" Text4, Text5 e Text6 che scendono.

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)

Finora, sembra che la presenza del testo incasinato dipenda dal fatto che la riga sia più lunga o meno e che la riga prima della nuova riga sia più lunga della riga dopo la nuova riga.

Qualche idea su cosa potrebbe andare storto? C'è una soluzione? Potrei usare elementi di testo semplice e preoccuparmi di avvolgere le linee usando Python, ma spero di riuscire a capire qualcosa.


1
Hai installato l'ultimo service pack?
Jason Scheirer,

Risposte:


10

Mi sono imbattuto anche in questo. È perché ArcGIS richiede terminazioni di riga di Windows che sono sia un ritorno a capo che un feed di riga. Un po 'di dolore. Fortunatamente è facile spostarsi. In Python invece di just \n(che è linefeed - vedi i documenti Python per saperne di più se sei appassionato), usa \r\n.


2

Penso che sia più facile usare il modulo textwrap:

Espressione etichetta Python:

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

E le etichette risultanti hanno ritorni a capo divisi alla larghezza del carattere che hai scelto.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.