L'insertion de sauts de ligne dans les éléments de texte rectangulaire via ArcPy provoque un chevauchement?

10

J'ai rencontré un problème l'autre jour lorsque j'ai essayé d'utiliser le module de cartographie d'ArcPy pour modifier des éléments de texte rectangulaires avec des retours à la ligne (\ n) dans un document ArcMap. Voici à quoi ressemblait la sortie:

entrez la description de l'image ici

Voici le code que j'ai utilisé pour générer cette sortie. La première colonne contient des éléments de texte rectangulaires Text1, Text2, Text3 descendant; la deuxième colonne contient les éléments de texte "en clair" Text4, Text5 et Text6 qui descendent.

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)

Jusqu'à présent, il semble que la présence du texte foiré dépend si la ligne est plus longue pour encapsuler et si la ligne avant la nouvelle ligne est plus longue que la ligne après la nouvelle ligne.

Des idées sur ce qui pourrait mal se passer? Y at-il un travail autour? Je pourrais utiliser des éléments de texte brut et m'inquiéter de l'habillage des lignes à l'aide de Python, mais j'espère pouvoir trouver quelque chose.

dmahr
la source
1
Le dernier Service Pack est-il installé?
Jason Scheirer

Réponses:

10

J'ai aussi rencontré ça. C'est parce qu'ArcGIS nécessite des fins de ligne Windows qui sont à la fois un retour chariot et un saut de ligne. Un peu de douleur. Heureusement, il est facile de se déplacer. En Python par au lieu de juste \n(qui est un saut de ligne - voir les documents Python pour plus si vous êtes désireux), utilisez \r\n.

om_henners
la source
2

Je pense qu'il est plus facile d'utiliser le module textwrap:

Expression d'étiquette Python:

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

Et les étiquettes résultantes ont des retours chariot divisés à la largeur de caractère que vous avez choisie.

entrez la description de l'image ici

crmackey
la source