Diferencias de versión Python y .NET

Aspose.Words para Python via .NET es un contenedor de Aspose.Words para .NET, es por eso que los dos productos tienen casi el mismo conjunto de características. Sin embargo, existen algunos matices de trabajo y diferencias en las funciones y API, que se describen en esta página.

Diferencias de características

Debido al proceso de empaquetado, hay algunas funciones que no están disponibles en la versión Python. Aquí hay una lista de las características más notables que actualmente no están disponibles en la versión Python.

  • La implementación de interfaces aún no es compatible, es por eso que no es posible utilizar devoluciones de llamada como IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback, etc.
  • La función de impresión no está disponible porque la versión .NET Standard 2.0 de Aspose.Words se utiliza como back-end de la versión de Python, que tampoco proporciona esta funcionalidad.
  • Solo se proporciona una funcionalidad Mail Merge simple con matrices de nombres de campos y valores de campos como fuente de datos.
  • La implementación DocumentVisitor actualmente no es posible desde el código Python.

Transmitir objetos Aspose.Words en Python

Aunque la conversión de tipos no es natural para los desarrolladores de Python, algunas tareas no se pueden realizar sin convertir nodos o campos de documentos a un tipo concreto. Aspose.Words para Python via .NET proporciona métodos especiales que permiten convertir objetos cuando sea necesario.

Nodos de fundición

La clase base para todos los nodos de documentos en Aspose.Words DOM es la clase Node. Por ejemplo, el método get_child devuelve una instancia de la clase Node, pero si necesita modificar el nodo devuelto, en la mayoría de los casos debe convertirlo a un tipo concreto. El siguiente código demuestra cómo cambiar el color de fuente del primer Run del 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")

También es posible que se requiera conversión cuando se utiliza el método 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")

Como habrás notado, en qué parte del código C# usarías (Paragraph)node para la transmisión, en Python debes usar el método node.as_paragraph(). En la versión Python de la clase Aspose.Words Node se introduce el siguiente enlace de métodos as_xxx:

El método as_xxx genera un RuntimeError con el mensaje como el siguiente si el nodo no se puede asignar al tipo especificado:

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

Campos de casting

La misma situación se aplica a los campos. El siguiente ejemplo de código demuestra cómo reemplazar enlaces de hipervínculo:

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 habrás notado, el objeto Field también proporciona un conjunto de métodos as_xxx, que se enumeran a continuación:

Estilos de casting

También se requiere casting para trabajar con estilos de tabla:

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

Lanzar controles ole

El siguiente ejemplo de código demuestra cómo leer las propiedades del control 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)

Fuentes de fuentes de conversión

La clase FontSourceBase proporciona un conjunto de métodos as_xxx, que se enumeran a continuación:

Acceso a las propiedades del indexador

Aspose.Words para Python permite propiedades del indexador solo por tipo int; sin embargo, en .NET es posible utilizar otros tipos, por ejemplo cadenas. Para llenar este vacío, las siguientes clases tienen métodos adicionales:

Nombramiento de miembros API

Para estar más cerca del mundo Python, los miembros API de Aspose.Words para Python via .NET utilizan el estilo de serpiente pitónica, sin embargo, en la mayoría de los casos tienen un análogo uno a uno en Aspose.Words para .NET API. Puedes encontrar estos analógicos en el archivo xml.