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:
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.
quelle
Antworten:
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
.quelle
Ich denke, es ist einfacher, das Textwrap-Modul zu verwenden:
Python-Label-Ausdruck:
Bei den resultierenden Beschriftungen werden die Zeilenumbrüche auf die von Ihnen gewählte Zeichenbreite aufgeteilt.
quelle