تفاوت نسخه Python و .NET

Aspose.Words for Python via .NET یک بسته بندی Aspose.Words برای .NET است، به همین دلیل است که این دو محصول تقریباً مجموعه ای از ویژگی های مشابه دارند. با این وجود، تفاوت های ظریف کار و تفاوت در ویژگی ها و API وجود دارد که در این صفحه توضیح داده شده است.

تفاوت ویژگی ها

با توجه به فرآیند بسته بندی برخی از ویژگی ها وجود دارد که در نسخه Python موجود نیست. در اینجا لیستی از قابل توجه ترین ویژگی هایی است که در حال حاضر در نسخه Python موجود نیستند.

  • پیاده سازی اینترفیس ها هنوز پشتیبانی نمی شود، به همین دلیل امکان استفاده از تماس های برگشتی مانند IWarningCallback، IReplacingCallback، IFieldUpdatingCallback، IFieldMergingCallback و غیره وجود ندارد.
  • ویژگی چاپ در دسترس نیست زیرا نسخه .NET Standard 2.0 Aspose.Words به عنوان پشتیبان نسخه پایتون استفاده می شود که همچنین این قابلیت را ارائه نمی دهد.
  • فقط عملکرد ساده Mail Merge با آرایه هایی از نام فیلدها و مقادیر فیلدها به عنوان منبع داده ارائه می شود.
  • اجرای DocumentVisitor در حال حاضر از طریق کد Python امکان پذیر نیست.

ریخته گری اشیاء Aspose.Words در Python

اگرچه ریخته‌گری نوع برای توسعه‌دهندگان Python طبیعی نیست، برخی از وظایف بدون ریخته‌گری گره‌ها یا فیلدهای اسناد به نوع بتن قابل انجام نیستند. Aspose.Words برای Python via .NET روش‌های خاصی را ارائه می‌کند که امکان ریخته‌گری اشیاء را در صورت لزوم فراهم می‌کند.

گره های ریخته گری

کلاس پایه برای تمام گره های سند در Aspose.Words DOM کلاس Node است. به عنوان مثال روش get_child و نمونه ای از کلاس Node را برمی گرداند، اما اگر نیاز به تغییر گره برگشتی دارید، در بیشتر موارد باید آن را به نوع بتن ریخته کنید. کد زیر نحوه تغییر رنگ فونت اولین Run در سند را نشان می دهد:

doc = aw.Document(docs_base.my_dir + "Document.docx")

# Get the first Run node and cast it to Run object.
run = doc.get_child(aw.NodeType.RUN, 0, True).as_run()

# Make changes to the run 
run.font.color = drawing.Color.red

# Save the result
doc.save(docs_base.artifacts_dir + "WorkingWithNode.change_run_color.docx")

هنگامی که از روش clone استفاده می شود، ممکن است ریخته گری نیز لازم باشد:

doc = aw.Document(docs_base.my_dir + "Document.docx")

clone = doc.clone().as_document()
clone.save(docs_base.artifacts_dir + "CloneAndCombineDocuments.cloning_document.docx")

همانطور که ممکن است متوجه شده باشید که در کد C# در کجا از (Paragraph)node برای ریخته گری استفاده می کنید، در Python باید از روش node.as_paragraph() استفاده کنید. در نسخه Python کلاس Aspose.Words Node پیوند زیر از متدهای as_xxx را معرفی می کند:

روش as_xxx یک RuntimeError را با پیامی مانند زیر افزایش می دهد اگر گره را نمی توان به نوع مشخص شده کوچک کرد:

RuntimeError: Proxy error(InvalidCastException): Unable to cast object of type ‘Aspose.Words.XXX’ to type ‘Aspose.Words.Drawing.YYY’.

زمینه های ریخته گری

همین وضعیت در مورد زمین ها صدق می کرد. مثال کد زیر نحوه جایگزینی لینک هایپر لینک را نشان می دهد:

doc = aw.Document(docs_base.my_dir + "Hyperlinks.docx")

for field in doc.range.fields :
            
    if field.type == aw.fields.FieldType.FIELD_HYPERLINK:
                
        hyperlink = field.as_field_hyperlink()
    
        # Some hyperlinks can be local (links to bookmarks inside the document), ignore these.
        if hyperlink.sub_address != None :
            continue
    
        hyperlink.address = "https:#www.aspose.com"
        hyperlink.result = "Aspose - The .net & Java Component Publisher"

doc.save(docs_base.artifacts_dir + "WorkingWithFields.replace_hyperlinks.docx")

همانطور که متوجه شدید شی Field نیز مجموعه ای از روش های as_xxx را ارائه می دهد که در زیر لیست شده است:

سبک های بازیگری

ریخته گری نیز برای کار با سبک های جدول مورد نیاز است:

doc = aw.Document()
builder = aw.DocumentBuilder(doc)

table = builder.start_table()
builder.insert_cell()
builder.write("Name")
builder.insert_cell()
builder.write("Value")
builder.end_row()
builder.insert_cell()
builder.insert_cell()
builder.end_table()

# Add a table style and modify it's properties.
tableStyle = doc.styles.add(aw.StyleType.TABLE, "MyTableStyle1").as_table_style()
tableStyle.borders.line_style = aw.LineStyle.DOUBLE
tableStyle.borders.line_width = 1
tableStyle.left_padding = 18
tableStyle.right_padding = 18
tableStyle.top_padding = 12
tableStyle.bottom_padding = 12

table.style = tableStyle

doc.save(docs_base.artifacts_dir + "WorkingWithTableStylesAndFormatting.create_table_style.docx")

Casting Ole Controls

مثال کد زیر نحوه خواندن ویژگی های کنترل ActiveX را نشان می دهد:

doc = aw.Document(docs_base.my_dir + "ActiveX controls.docx")

properties = ""
for shape in doc.get_child_nodes(aw.NodeType.SHAPE, True) :
            
    shape = shape.as_shape()
            
    if shape.ole_format == None :
        break
    
    oleControl = shape.ole_format.ole_control
    if oleControl.is_forms2_ole_control :
                
        checkBox =  oleControl.as_forms2_ole_control()
        properties = properties + "\nCaption: " + checkBox.caption
        properties = properties + "\nValue: " + checkBox.value
        properties = properties + "\nEnabled: " + str(checkBox.enabled)
        properties = properties + "\nType: " + str(checkBox.type)
    
        if checkBox.child_nodes != None :
            properties = properties + "\nChildNodes: " + checkBox.child_nodes
    
        properties += "\n"

properties = properties + "\nTotal ActiveX Controls found: " + str(doc.get_child_nodes(aw.NodeType.SHAPE, True).count)
print("\n" + properties)

منابع فونت ریخته گری

کلاس FontSourceBase مجموعه ای از روش های as_xxx را ارائه می دهد که در زیر لیست شده است:

دسترسی به ویژگی های ایندکسر

Aspose.Words برای Python ویژگی های نمایه ساز را فقط بر اساس نوع int مجاز می کند، اما در .NET می توان از انواع دیگر مانند رشته ها استفاده کرد. برای پر کردن این شکاف کلاس های زیر یک روش اضافی دارند:

نامگذاری اعضای API

برای نزدیک‌تر شدن به دنیای Python، اعضای API Aspose.Words برای Python via .NET از سبک مار پایتونیک استفاده می‌کنند، با این حال در اکثر موارد آنها یک به یک آنالوگ در Aspose.Words برای .NET API دارند. شما می توانید این آنالوگ را در فایل xml پیدا کنید.