اختلافات إصدار Python و.NET

Aspose.Words for Python via .NET عبارة عن غلاف لـ Aspose.Words لـ .NET، ولهذا السبب يتمتع المنتجان بنفس مجموعة الميزات تقريبًا. ومع ذلك، هناك بعض الفروق الدقيقة في العمل والاختلافات في الميزات وAPI، الموضحة في هذه الصفحة.

اختلافات الميزات

بسبب عملية التغليف، هناك بعض الميزات غير المتوفرة في إصدار Python. فيما يلي قائمة بأبرز الميزات غير المتوفرة حاليًا في إصدار Python.

  • تنفيذ الواجهات غير مدعوم حتى الآن، ولهذا السبب لا يمكن استخدام عمليات الاسترجاعات مثل IWarningCallback، IReplacingCallback، IFieldUpdatingCallback، IFieldMergingCallback وما إلى ذلك.
  • ميزة الطباعة غير متاحة نظرًا لاستخدام إصدار .NET Standard 2.0 من Aspose.Words كواجهة خلفية لإصدار python، والذي لا يوفر هذه الوظيفة أيضًا.
  • يتم توفير وظيفة Mail Merge البسيطة فقط مع صفائف أسماء الحقول وقيم الحقول كمصدر بيانات.
  • تنفيذ DocumentVisitor غير ممكن حاليًا من كود Python.

صب كائنات Aspose.Words في Python

على الرغم من أن تحويل الكتابة ليس أمرًا طبيعيًا بالنسبة لمطوري Python، إلا أن بعض المهام لا يمكن إنجازها دون إرسال العقد أو الحقول إلى نوع محدد من المستندات. يوفر Aspose.Words for 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")

كما قد تلاحظ أين تستخدم (Paragraph)node في كود C# للإرسال، في 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")

صب الضوابط أولي

يوضح مثال التعليمات البرمجية التالي كيفية قراءة خصائص عنصر تحكم 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 for Python بخصائص المفهرس فقط حسب نوع int، في .NET، ومع ذلك من الممكن استخدام أنواع أخرى، على سبيل المثال السلاسل. لملء هذه الفجوة، لدى الفئات التالية طرق إضافية:

تسمية أعضاء API

لكي نكون أقرب إلى عالم Python، يستخدم أعضاء API في Aspose.Words لـ Python via .NET أسلوب الثعبان الثعباني، ولكن في معظم الحالات لديهم تناظري واحد لواحد في Aspose.Words لـ .NET API. يمكنك العثور على هذه التناظرية في ملف XML.