Encontrei um problema outro dia quando tentei usar o módulo de mapeamento do ArcPy para editar elementos de texto retangulares com novas linhas (\ n) em um documento do ArcMap. Aqui está a aparência da saída:
Aqui está o código que eu usei para gerar essa saída. A primeira coluna são os elementos de texto do retângulo Text1, Text2, Text3 caindo; a segunda coluna são os elementos de texto "simples" Text4, Text5 e Text6 caindo.
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)
Até o momento, parece que a presença do texto desarrumado depende se a linha é mais longa o suficiente para quebrar e se a linha antes da nova linha é maior que a linha após a nova linha.
Alguma idéia sobre o que poderia estar errado? Existe uma solução alternativa? Eu poderia usar elementos de texto simples e me preocupar com a quebra de linhas usando Python, mas espero poder descobrir algo.
fonte
Respostas:
Eu encontrei isso também. Isso ocorre porque o ArcGIS requer terminações de linha do Windows que são um retorno de carro e um avanço de linha. Um pouco de dor. Felizmente, é fácil se locomover. No Python, em vez de just
\n
(que é avanço de linha - consulte os documentos do Python para obter mais informações, se você estiver interessado), use\r\n
.fonte
Eu acho que é mais fácil usar o módulo textwrap:
Expressão de rótulo Python:
E os rótulos resultantes têm retornos de carro divididos na largura de caractere escolhida.
fonte