Différences entre les versions Python et .NET

Aspose.Words pour Python via .NET est un wrapper de Aspose.Words pour .NET, c’est pourquoi les deux produits ont presque le même ensemble de fonctionnalités. Néanmoins, il existe certaines nuances de travail et différences dans les fonctionnalités et le API, qui sont décrites sur cette page.

Différences de fonctionnalités

En raison du processus d’emballage, certaines fonctionnalités ne sont pas disponibles dans la version Python. Voici une liste des fonctionnalités les plus remarquables qui ne sont actuellement pas disponibles dans la version Python.

  • L’implémentation d’interfaces n’est pas encore supportée, c’est pourquoi il n’est pas possible d’utiliser des rappels tels que IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback etc.
  • La fonctionnalité d’impression n’est pas disponible car la version .NET Standard 2.0 de Aspose.Words est utilisée comme back-end de la version python, qui ne fournit pas non plus cette fonctionnalité.
  • Seule une fonctionnalité Mail Merge simple est fournie avec des tableaux de noms de champs et de valeurs de champs comme source de données.
  • L’implémentation DocumentVisitor n’est actuellement pas possible à partir du code Python.

Casting d’objets Aspose.Words dans Python

Bien que la conversion de type ne soit pas naturelle pour les développeurs Python, certaines tâches ne peuvent pas être accomplies sans convertir les nœuds ou les champs des documents en type concret. Aspose.Words pour Python via .NET fournit des méthodes spéciales qui permettent de convertir des objets là où cela est nécessaire.

Nœuds de diffusion

La classe de base pour tous les nœuds de document dans Aspose.Words DOM est la classe Node. Par exemple, la méthode get_child renvoie une instance de classe Node, mais si vous devez modifier le nœud renvoyé, dans la plupart des cas, vous devez le convertir en type concret. Le code suivant montre comment modifier la couleur de la police du premier Run du document:

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

La conversion peut également être requise lorsque la méthode clone est utilisée:

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

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

Comme vous avez peut-être remarqué où dans le code C# vous utiliseriez (Paragraph)node pour la diffusion, en Python, vous devez utiliser la méthode node.as_paragraph(). Dans la version Python de la classe Aspose.Words Node introduit le lien suivant de méthodes as_xxx:

La méthode as_xxx génère un RuntimeError avec le message suivant si le nœud ne peut pas être mis en casse selon le type spécifié:

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

Champs de coulée

La même situation s’appliquait aux champs. L’exemple de code suivant montre comment remplacer les liens hypertexte:

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

Comme vous l’avez peut-être remarqué, l’objet Field fournit également un ensemble de méthodes as_xxx, répertoriées ci-dessous:

Styles de casting

Le casting est également requis pour travailler avec les styles de table:

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

Casting des contrôles Ole

L’exemple de code suivant montre comment lire les propriétés du contrôle 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)

Sources de polices de diffusion

La classe FontSourceBase fournit un ensemble de méthodes as_xxx, répertoriées ci-dessous:

Accès aux propriétés de l’indexeur

Aspose.Words pour Python autorise les propriétés d’indexeur uniquement par type int, en .NET cependant il est possible d’utiliser d’autres types, par exemple des chaînes. Pour combler cette lacune, les classes suivantes disposent de méthodes supplémentaires:

Dénomination des membres API

Pour se rapprocher du monde Python, les membres API de Aspose.Words pour Python via .NET utilisent le style serpent pythonique, mais dans la plupart des cas, ils ont un analogue individuel en Aspose.Words pour .NET API. Vous pouvez trouver ces analogues dans le fichier XML.