Inserir novas linhas nos elementos Rectangle Text via ArcPy causa sobreposição?


10

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:

insira a descrição da imagem aqui

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.


1
Você tem o service pack mais recente instalado?
Jason Scheirer

Respostas:


10

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.


2

Eu acho que é mais fácil usar o módulo textwrap:

Expressão de rótulo Python:

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

E os rótulos resultantes têm retornos de carro divididos na largura de caractere escolhida.

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.