Różnice w wersjach Python i .NET

Aspose.Words dla Python via .NET jest opakowaniem Aspose.Words dla .NET, dlatego oba produkty mają prawie ten sam zestaw funkcji. Niemniej jednak istnieją pewne niuanse pracy i różnice w funkcjach i API, które są opisane na tej stronie.

Różnice w funkcjach

Ze względu na proces pakowania niektóre funkcje nie są dostępne w wersji Python. Oto lista najważniejszych funkcji, które obecnie nie są dostępne w wersji Python.

  • Implementacja interfejsów nie jest jeszcze obsługiwana, dlatego nie można używać wywołań zwrotnych takich jak IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback itp.
  • Funkcja drukowania nie jest dostępna, ponieważ wersja Aspose.Words .NET Standard 2.0 jest używana jako zaplecze wersji Pythona, która również nie zapewnia tej funkcjonalności.
  • Udostępniana jest tylko prosta funkcjonalność Mail Merge z tablicami nazw pól i wartości pól jako źródła danych.
  • Implementacja DocumentVisitor nie jest obecnie możliwa z kodu Python.

Przesyłanie obiektów Aspose.Words do formatu Python

Chociaż rzutowanie typów nie jest czymś naturalnym dla programistów Python, niektórych zadań nie można wykonać bez rzutowania węzłów dokumentów lub pól na konkretny typ. Aspose.Words dla Python via .NET udostępnia specjalne metody umożliwiające rzutowanie obiektów tam, gdzie jest to konieczne.

Węzły rzutowania

Klasą bazową dla wszystkich węzłów dokumentu w formacie Aspose.Words DOM jest klasa Node. Na przykład zwracana metoda get_child i instancja klasy Node, ale jeśli chcesz zmodyfikować zwrócony węzeł, w większości przypadków powinieneś rzutować go na konkretny typ. Poniższy kod demonstruje, jak zmienić kolor czcionki pierwszego Run w dokumencie:

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

Casting może być również wymagany w przypadku stosowania metody 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")

Jak zapewne zauważyłeś, gdzie w kodzie C# do rzutowania użyjesz (Paragraph)node, w Python musisz użyć metody node.as_paragraph(). W wersji Python klasy Aspose.Words Node wprowadza się następujące łącze metod as_xxx:

Metoda as_xxx wywołuje RuntimeError z komunikatem podobnym do poniższego, jeśli w węźle nie można dopasować wielkości liter do określonego typu:

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

Pola odlewnicze

Ta sama sytuacja dotyczyła pól. Poniższy przykład kodu demonstruje, jak zastąpić łącza hiperłączy:

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

Jak zapewne zauważyłeś, obiekt Field udostępnia również zestaw metod as_xxx, które są wymienione poniżej:

Style castingowe

Do pracy ze stylami tabel wymagane jest również rzutowanie:

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

Sterowanie odlewaniem Ole

Poniższy przykład kodu ilustruje sposób odczytywania właściwości kontrolki 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)

Przesyłanie źródeł czcionek

Klasa FontSourceBase udostępnia zestaw metod as_xxx, które są wymienione poniżej:

Dostęp do właściwości indeksatora

Aspose.Words dla Python zezwala na właściwości indeksatora tylko według typu int, w .NET można jednak użyć innych typów, na przykład ciągów znaków. Aby wypełnić tę lukę poniższe klasy posiadają dodatkowe metody:

Nazewnictwo członków API

Aby być bliżej świata Python, członkowie API Aspose.Words dla Python via .NET używają Pythona w stylu węża, jednak w większości przypadków mają analogi jeden do jednego w Aspose.Words dla .NET API. Te analogi można znaleźć w pliku plik XML.