Saya mengalami masalah di lain hari ketika saya mencoba menggunakan modul pemetaan ArcPy untuk mengedit elemen teks persegi panjang dengan baris baru (\ n) dalam dokumen ArcMap. Seperti apa outputnya:
Inilah kode yang saya gunakan untuk menghasilkan keluaran itu. Kolom pertama adalah elemen teks persegi panjang Text1, Text2, Text3 turun; kolom kedua adalah elemen teks "biasa" Text4, Text5, dan Text6 turun.
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)
Sejauh ini, tampaknya keberadaan teks yang berantakan tergantung pada apakah baris lebih panjang untuk dibungkus, dan apakah baris sebelum baris lebih panjang dari baris setelah baris baru.
Ada ide tentang apa yang salah? Apakah ada solusinya? Saya bisa menggunakan elemen teks biasa dan khawatir tentang membungkus garis menggunakan Python, tapi saya berharap saya bisa memikirkan sesuatu.
sumber
Jawaban:
Saya juga mengalami hal ini. Itu karena ArcGIS membutuhkan ujung garis Windows yang merupakan carriage return dan line feed. Sedikit sakit. Untungnya mudah untuk berkeliling. Dalam Python dengan alih-alih adil
\n
(yang merupakan linefeed - lihat dokumen Python untuk informasi lebih lanjut jika Anda tertarik), gunakan\r\n
.sumber
Saya pikir lebih mudah menggunakan modul textwrap:
Ekspresi label python:
Dan label yang dihasilkan memiliki carriage return terbagi pada lebar karakter apa pun yang Anda pilih.
sumber