Perbedaan Versi Python dan .NET

Aspose.Words untuk Python via .NET adalah pembungkus Aspose.Words untuk .NET, itulah sebabnya kedua produk tersebut memiliki serangkaian fitur yang hampir sama. Meski demikian, ada beberapa nuansa kerja dan perbedaan fitur dan API yang dijelaskan di halaman ini.

Perbedaan Fitur

Karena proses pembungkusan ada beberapa fitur yang tidak tersedia pada versi Python. Berikut adalah daftar fitur paling menonjol yang saat ini tidak tersedia di versi Python.

  • Implementasi antarmuka belum didukung, itulah sebabnya callback seperti IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback, dll tidak dapat digunakan.
  • Fitur pencetakan tidak tersedia karena Aspose.Words versi .NET Standard 2.0 digunakan sebagai back-end versi python, yang juga tidak menyediakan fungsi ini.
  • Hanya fungsionalitas Mail Merge sederhana yang disediakan dengan susunan nama bidang dan nilai bidang sebagai sumber data.
  • Implementasi DocumentVisitor saat ini tidak dapat dilakukan dari kode Python.

Mentransmisikan Objek Aspose.Words di Python

Meskipun pengecoran tipe tidak wajar bagi pengembang Python, beberapa tugas tidak dapat diselesaikan tanpa pengecoran node atau bidang dokumen ke tipe konkret. Aspose.Words untuk Python via .NET menyediakan metode khusus yang memungkinkan casting objek jika diperlukan.

Node Pengecoran

Kelas dasar untuk semua node dokumen di Aspose.Words DOM adalah kelas Node. Misalnya pengembalian metode get_child dan turunan kelas Node, tetapi jika Anda perlu memodifikasi simpul yang dikembalikan, dalam banyak kasus Anda harus mengubahnya ke tipe konkret. Kode berikut menunjukkan cara mengubah warna font Run pertama dalam dokumen:

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")

Transmisi mungkin juga diperlukan ketika metode clone digunakan:

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

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

Seperti yang mungkin Anda perhatikan di mana dalam kode C# Anda akan menggunakan (Paragraph)node untuk transmisi, dalam Python Anda harus menggunakan metode node.as_paragraph(). Dalam versi Python kelas Aspose.Words Node memperkenalkan tautan metode as_xxx berikut:

Metode as_xxx memunculkan RuntimeError dengan pesan seperti berikut jika node tidak dapat di-case ke tipe yang ditentukan:

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

Bidang Pengecoran

Situasi yang sama juga berlaku di lapangan. Contoh kode berikut menunjukkan cara mengganti tautan hyperlink:

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")

Seperti yang mungkin Anda perhatikan, objek Field juga menyediakan serangkaian metode as_xxx, yang tercantum di bawah ini:

Gaya Pengecoran

Casting juga diperlukan untuk bekerja dengan gaya tabel:

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")

Kontrol Pengecoran Ole

Contoh kode berikut menunjukkan cara membaca properti kontrol 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)

Mentransmisikan Sumber Font

Kelas FontSourceBase menyediakan serangkaian metode as_xxx, yang tercantum di bawah ini:

Mengakses Properti Pengindeks

Aspose.Words untuk Python mengizinkan properti pengindeks hanya berdasarkan tipe int, namun di .NET dimungkinkan untuk menggunakan tipe lain, misalnya string. Untuk mengisi kesenjangan ini, kelas-kelas berikut memiliki metode tambahan:

Penamaan Anggota API

Agar lebih dekat dengan dunia Python, anggota API Aspose.Words untuk Python via .NET menggunakan gaya ular pythonic, namun dalam banyak kasus mereka memiliki analog 1-1 dalam Aspose.Words untuk .NET API. Anda dapat menemukan analog ini di file xml.