ArcPy aracılığıyla Dikdörtgen Metin öğelerine yeni satırlar eklemek çakışmaya mı neden oluyor?


10

Geçen gün bir ArcMap belgesinde yeni satırlarla (\ n) dikdörtgen metin öğelerini düzenlemek için ArcPy'nin eşleme modülünü kullanmaya çalıştığımda bir sorunla karşılaştım. Çıktı şöyle görünüyordu:

resim açıklamasını buraya girin

İşte bu çıktıyı oluşturmak için kullandığım kod. İlk sütun, metin1, Metin2, Metin3'ün aşağı ineceği dikdörtgen metin öğeleridir; ikinci sütun, Metin4, Metin5 ve Metin6 aşağı inen "düz" metin öğeleridir.

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)

Şimdiye kadar, dağınık metnin varlığı, satırın sarılmaya yetecek kadar uzun olup olmamasına ve yeni satırdan önceki satırın yeni satırdan sonraki satırdan uzun olup olmamasına bağlıdır.

Neyin yanlış gidebileceği hakkında bir fikriniz var mı? Bir çözüm var mı? Düz metin öğeleri kullanabilir ve Python kullanarak satırları sarma konusunda endişelenebilirim, ancak bir şey bulabileceğimi umuyorum.


1
En son hizmet paketini yüklediniz mi?
Jason Scheirer

Yanıtlar:


10

Ben de bununla karşılaştım. Çünkü ArcGIS, hem satır başı hem de satır besleme olan Windows satır sonlarına ihtiyaç duyar. Biraz acı. Neyse ki dolaşmak kolaydır. Python'da \n(satır besleme) yerine, istersen daha fazla bilgi için Python belgelerine bakın ) kullanın \r\n.


2

Ben textwrap modülünü kullanmak daha kolay olduğunu düşünüyorum:

Python etiket ifadesi:

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

Ve sonuçta ortaya çıkan etiketlerde seçtiğiniz karakter genişliğinde satır başı döndürülür.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.