Diferenças de versão Python e .NET

Aspose.Words para Python via .NET é um wrapper de Aspose.Words para .NET, por isso os dois produtos possuem quase o mesmo conjunto de recursos. No entanto, existem algumas nuances de trabalho e diferenças de recursos e API, que são descritas nesta página.

Diferenças de recursos

Devido ao processo de empacotamento, existem alguns recursos que não estão disponíveis na versão Python. Aqui está uma lista dos recursos mais notáveis que atualmente não estão disponíveis na versão Python.

  • A implementação de interfaces ainda não é suportada, por isso não é possível utilizar callbacks como IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback etc.
  • O recurso de impressão não está disponível porque a versão .NET Standard 2.0 do Aspose.Words é usada como back-end da versão python, que também não oferece esta funcionalidade.
  • Apenas a funcionalidade Mail Merge simples é fornecida com matrizes de nomes de campos e valores de campos como fonte de dados. *A implementação DocumentVisitor atualmente não é possível a partir do código Python.

Transmitindo objetos Aspose.Words em Python

Embora a conversão de tipo não seja natural para desenvolvedores Python, algumas tarefas não podem ser realizadas sem a conversão de nós ou campos de documentos para um tipo concreto. Aspose.Words para Python via .NET fornece métodos especiais que permitem converter objetos onde for necessário.

Nós de fundição

A classe base para todos os nós de documento em Aspose.Words DOM é a classe Node. Por exemplo, o método get_child retorna uma instância da classe Node, mas se você precisar modificar o nó retornado, na maioria dos casos você deverá convertê-lo para um tipo concreto. O código a seguir demonstra como alterar a cor da fonte do primeiro Run do documento:

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

A conversão também pode ser necessária quando o método clone é usado:

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

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

Como você deve ter notado onde no código C# você usaria (Paragraph)node para conversão, em Python você deve usar o método node.as_paragraph(). Na versão Python da classe Aspose.Words Node apresenta o seguinte link de métodos as_xxx:

O método as_xxx gera um RuntimeError com a mensagem como a seguinte se o nó não puder ser caseado para o tipo especificado:

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

Campos de Fundição

A mesma situação se aplica aos campos. O exemplo de código a seguir demonstra como substituir links de hiperlink:

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

Como você deve ter notado, o objeto Field também fornece um conjunto de métodos as_xxx, listados abaixo:

Estilos de elenco

A conversão também é necessária para trabalhar com estilos de tabela:

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

Fundindo controles Ole

O exemplo de código a seguir demonstra como ler propriedades de controle 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)

Transmitindo fontes de fontes

A classe FontSourceBase fornece um conjunto de métodos as_xxx, listados abaixo:

Acessando propriedades do indexador

Aspose.Words para Python permite propriedades do indexador apenas por tipo int, em .NET porém é possível utilizar outros tipos, por exemplo strings. Para preencher essa lacuna, as seguintes classes possuem métodos adicionais:

Nomeação de membros API

Para estar mais próximo do mundo Python, os membros API do Aspose.Words para Python via .NET usam o estilo python python, porém na maioria dos casos eles têm um para um análogo em Aspose.Words para .NET API. Você pode encontrar esses análogos no arquivoxml.