Das Einfügen von Zeilenumbrüchen in Rechtecktextelemente über ArcPy führt zu Überlappungen.


10

Ich bin neulich auf ein Problem gestoßen, als ich versucht habe, mithilfe des Zuordnungsmoduls von ArcPy rechteckige Textelemente mit Zeilenumbrüchen (\ n) in einem ArcMap-Dokument zu bearbeiten. So sah die Ausgabe aus:

Geben Sie hier die Bildbeschreibung ein

Hier ist der Code, mit dem ich diese Ausgabe generiert habe. Die erste Spalte enthält rechteckige Textelemente Text1, Text2, Text3, die nach unten gehen. Die zweite Spalte enthält "einfache" Textelemente wie Text4, Text5 und Text6.

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)

Bisher sieht es so aus, als ob das Vorhandensein des durcheinandergebrachten Textes davon abhängt, ob die Zeile länger genug ist, um umgebrochen zu werden, und ob die Zeile vor der neuen Zeile länger ist als die Zeile nach der neuen Zeile.

Irgendwelche Ideen, was schief gehen könnte? Gibt es eine Problemumgehung? Ich könnte einfache Textelemente verwenden und mir Gedanken über das Umbrechen von Zeilen mit Python machen, aber ich hoffe, ich kann etwas herausfinden.


1
Haben Sie das neueste Service Pack installiert?
Jason Scheirer

Antworten:


10

Ich bin auch darauf gestoßen. Dies liegt daran, dass für ArcGIS Windows-Zeilenenden erforderlich sind, die sowohl einen Wagenrücklauf als auch einen Zeilenvorschub darstellen. Ein bisschen schmerzhaft. Zum Glück ist es einfach, herumzukommen. Verwenden Sie in Python by statt nur \n(was Linefeed ist - weitere Informationen finden Sie in den Python-Dokumenten , wenn Sie daran interessiert sind) \r\n.


2

Ich denke, es ist einfacher, das Textwrap-Modul zu verwenden:

Python-Label-Ausdruck:

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

Bei den resultierenden Beschriftungen werden die Zeilenumbrüche auf die von Ihnen gewählte Zeichenbreite aufgeteilt.

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.