Memasukkan baris baru dalam elemen Teks Persegi Panjang melalui ArcPy menyebabkan tumpang tindih?

10

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:

masukkan deskripsi gambar di sini

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.

dmahr
sumber
1
Apakah Anda memiliki paket layanan terbaru yang diinstal?
Jason Scheirer

Jawaban:

10

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.

om_henners
sumber
2

Saya pikir lebih mudah menggunakan modul textwrap:

Ekspresi label python:

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

Dan label yang dihasilkan memiliki carriage return terbagi pada lebar karakter apa pun yang Anda pilih.

masukkan deskripsi gambar di sini

Crmackey
sumber