ArcPy के माध्यम से आयत पाठ तत्वों में नए सिरे को सम्मिलित करना ओवरलैप का कारण बनता है?


10

मैं दूसरे दिन एक मुद्दे पर भाग गया जब मैंने आर्कपैक दस्तावेज़ में newlines (\ n) के साथ आयत पाठ तत्वों को संपादित करने के लिए आर्कपी के मैपिंग मॉड्यूल का उपयोग करने की कोशिश की। यहाँ क्या उत्पादन की तरह लग रहा था:

यहां छवि विवरण दर्ज करें

यहाँ मैं उस आउटपुट को जेनरेट करने के लिए उपयोग किया गया कोड है। पहला कॉलम आयत पाठ तत्व Text1, Text2, Text3 नीचे जा रहा है; दूसरा कॉलम "सादे" टेक्स्ट एलिमेंट्स Text4, Text5 और 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)

अब तक, ऐसा लगता है कि गड़बड़ किए गए पाठ की उपस्थिति इस बात पर निर्भर करती है कि क्या लाइन को लपेटने के लिए पर्याप्त लंबा है, और क्या नई रेखा से पहले की रेखा नई रेखा के बाद की रेखा से अधिक लंबी है।

क्या गलत हो सकता है के बारे में कोई विचार? क्या आसपास कोई काम है? मैं सादे पाठ तत्वों का उपयोग कर सकता हूं और पायथन का उपयोग करके लाइनों को लपेटने के बारे में चिंता कर सकता हूं, लेकिन मुझे उम्मीद है कि मैं कुछ समझ सकता हूं।


1
क्या आपके पास नवीनतम सर्विस पैक स्थापित है?
जेसन शहीर

जवाबों:


10

मैं इसमें भी भाग गया। ऐसा इसलिए है क्योंकि आर्कगिस को विंडोज लाइन एंडिंग की आवश्यकता होती है जो एक गाड़ी वापसी और एक लाइन फीड दोनों हैं। एक दर्द का सा। सौभाग्य से इसे प्राप्त करना आसान है। पायथन में सिर्फ के बजाय \n(जो कि लाइनफीड है - यदि आप उत्सुक हैं तो अधिक के लिए अजगर डॉक्स देखें ) का उपयोग करें \r\n


2

मुझे लगता है कि textwrap मॉड्यूल का उपयोग करना आसान है:

पायथन लेबल अभिव्यक्ति:

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

और परिणामी लेबल में आपके द्वारा चुनी गई वर्ण चौड़ाई पर कैरिज रिटर्न विभाजित है।

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.