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
:
- as_document()
- as_section()
- as_body()
- as_header_footer()
- as_table()
- as_row()
- as_cell()
- as_paragraph()
- as_bookmark_start()
- as_bookmark_end()
- as_editable_range_start()
- as_editable_range_end()
- as_group_shape()
- as_shape()
- as_comment()
- as_footnote()
- as_run()
- as_field_start()
- as_field_separator()
- as_field_end()
- as_form_field()
- as_special_char()
- as_smart_tag()
- as_structured_document_tag()
- as_structured_document_tag_range_start()
- as_structured_document_tag_range_end()
- as_glossary_document()
- as_building_block()
- as_comment_range_start()
- as_comment_range_end()
- as_office_math()
- as_sub_document()
- as_composite_node()
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:
- as_field_unknown()
- as_field_merge_barcode()
- as_field_display_barcode()
- as_field_print()
- as_field_private()
- as_field_advance()
- as_field_form_check_box()
- as_field_form_drop_down()
- as_field_index()
- as_field_rd()
- as_field_ta()
- as_field_toa()
- as_field_ask()
- as_field_auto_text()
- as_field_auto_text_list()
- as_field_bibliography()
- as_field_citation()
- as_field_dde()
- as_field_dde_auto()
- as_field_fill_in()
- as_field_glossary()
- as_field_import()
- as_field_include()
- as_field_shape()
- as_field_database()
- as_field_skip_if()
- as_field_list_num()
- as_field_rev_num()
- as_field_section()
- as_field_section_pages()
- as_field_data()
- as_field_embed()
- as_field_ocx()
- as_field_auto_num()
- as_field_auto_num_lgl()
- as_field_auto_num_out()
- as_field_add_in()
- as_field_barcode()
- as_field_bidi_outline()
- as_field_eq()
- as_field_footnote_ref()
- as_field_info()
- as_field_user_address()
- as_field_user_initials()
- as_field_user_name()
- as_field_include_picture()
- as_field_page()
- as_field_create_date()
- as_field_edit_time()
- as_field_print_date()
- as_field_save_date()
- as_field_go_to_button()
- as_field_author()
- as_field_comments()
- as_field_file_name()
- as_field_file_size()
- as_field_keywords()
- as_field_last_saved_by()
- as_field_num_chars()
- as_field_num_pages()
- as_field_num_words()
- as_field_subject()
- as_field_template()
- as_field_title()
- as_field_formula()
- as_field_symbol()
- as_field_quote()
- as_field_set()
- as_field_address_block()
- as_field_compare()
- as_field_date()
- as_field_doc_property()
- as_field_doc_variable()
- as_field_greeting_line()
- as_field_hyperlink()
- as_field_if()
- as_field_include_text()
- as_field_link()
- as_field_macro_button()
- as_field_merge_field()
- as_field_merge_rec()
- as_field_merge_seq()
- as_field_next()
- as_field_next_if()
- as_field_note_ref()
- as_field_page_ref()
- as_field_ref()
- as_field_seq()
- as_field_style_ref()
- as_field_tc()
- as_field_time()
- as_field_toc()
- as_field_xe()
- as_field_form_text()
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:
- as_file_font_source()
- as_folder_font_source()
- as_memory_font_source()
- as_stream_font_source()
- as_system_font_source()
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:
- FormFieldCollection * get_by_name(bookmark_name)
- FontInfoCollection * get_by_name(name)
- CustomXmlPartCollection * get_by_id(id)
- CustomXmlPropertyCollection * get_by_name(name)
- BuiltInDocumentProperties * get_by_name(name)
- CustomDocumentProperties * get_by_name(name)
- BookmarksOutlineLevelCollection * get_by_name(name)
- VbaModuleCollection * get_by_name(name)
- BookmarkCollection * get_by_name(bookmark_name)
- BorderCollection * get_by_border_type(border_type)
- HeaderFooterCollection * get_by_header_footer_type(header_footer_type)
- StyleCollection * get_by_name(name) * get_by_style_identifier(sti)
- VariableCollection * get_by_name(name)
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.