Unterschiede zwischen Python- und .NET-Versionen
Aspose.Words für Python via .NET ist ein Wrapper von Aspose.Words für .NET, weshalb die beiden Produkte fast die gleichen Funktionen haben. Dennoch gibt es einige Arbeitsnuancen und Unterschiede in den Funktionen und API, die auf dieser Seite beschrieben werden.
Funktionsunterschiede
Aufgrund des Wrapping-Prozesses gibt es einige Funktionen, die in der Python-Version nicht verfügbar sind. Hier ist eine Liste der bemerkenswertesten Funktionen, die derzeit in der Python-Version nicht verfügbar sind.
- Die Implementierung von Schnittstellen wird noch nicht unterstützt, daher ist es nicht möglich, Callbacks wie IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback usw. zu verwenden.
- Die Druckfunktion ist nicht verfügbar, da die .NET Standard 2.0-Version von Aspose.Words als Back-End der Python-Version verwendet wird, die diese Funktionalität ebenfalls nicht bietet.
- Mit Arrays aus Feldnamen und Feldwerten als Datenquelle wird nur einfache Mail Merge-Funktionalität bereitgestellt.
- Eine DocumentVisitor-Implementierung aus dem Python-Code ist derzeit nicht möglich.
Umwandeln von Aspose.Words-Objekten in Python
Obwohl die Typumwandlung für Python-Entwickler nicht selbstverständlich ist, können einige Aufgaben nicht erledigt werden, ohne Dokumentknoten oder -felder in einen konkreten Typ umzuwandeln. Aspose.Words for Python via .NET bietet spezielle Methoden, die das Umwandeln von Objekten dort ermöglichen, wo dies erforderlich ist.
Casting-Knoten
Die Basisklasse für alle Dokumentknoten in Aspose.Words DOM ist die Node-Klasse. Beispielsweise gibt die get_child-Methode eine Instanz einer Node-Klasse zurück. Wenn Sie jedoch den zurückgegebenen Knoten ändern müssen, sollten Sie ihn in den meisten Fällen in einen konkreten Typ umwandeln. Der folgende Code zeigt, wie die Schriftfarbe des ersten Run im Dokument geändert wird:
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")
Bei Verwendung der clone-Methode ist möglicherweise auch eine Umwandlung erforderlich:
doc = aw.Document(docs_base.my_dir + "Document.docx")
clone = doc.clone().as_document()
clone.save(docs_base.artifacts_dir + "CloneAndCombineDocuments.cloning_document.docx")
Wie Ihnen vielleicht aufgefallen ist, dass Sie im C#-Code (Paragraph)node
zum Umwandeln verwenden würden, müssen Sie in Python die node.as_paragraph()
-Methode verwenden. In der Python-Version der Aspose.Words-Node-Klasse wird der folgende Link zu as_xxx
-Methoden eingeführt:
- 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()
Die as_xxx
-Methode löst einen RuntimeError
mit der folgenden Meldung aus, wenn der Knoten nicht in den angegebenen Typ umgewandelt werden kann:
RuntimeError: Proxy error(InvalidCastException): Unable to cast object of type ‘Aspose.Words.XXX’ to type ‘Aspose.Words.Drawing.YYY’.
Casting-Felder
Die gleiche Situation galt für Felder. Das folgende Codebeispiel zeigt, wie Hyperlink-Links ersetzt werden:
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")
Wie Sie vielleicht bemerkt haben, stellt das Field-Objekt auch eine Reihe von as_xxx
-Methoden bereit, die unten aufgeführt sind:
- 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()
Besetzungsstile
Für die Arbeit mit Tabellenstilen ist auch ein Casting erforderlich:
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")
Besetzung von Ole Controls
Das folgende Codebeispiel zeigt, wie ActiveX-Steuerelementeigenschaften gelesen werden:
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)
Casting-Schriftquellen
Die FontSourceBase-Klasse stellt eine Reihe von as_xxx
-Methoden bereit, die unten aufgeführt sind:
- as_file_font_source()
- as_folder_font_source()
- as_memory_font_source()
- as_stream_font_source()
- as_system_font_source()
Zugreifen auf Indexereigenschaften
Aspose.Words für Python lässt Indexereigenschaften nur nach int-Typ zu, in .NET ist es jedoch möglich, andere Typen zu verwenden, beispielsweise Zeichenfolgen. Um diese Lücke zu schließen, verfügen die folgenden Klassen über zusätzliche Methoden:
- 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)
Benennung von API-Mitgliedern
Um näher an der Python-Welt zu sein, verwenden API-Mitglieder von Aspose.Words für Python via .NET den Python-Snake-Stil, in den meisten Fällen haben sie jedoch eins zu eins Analogon in Aspose.Words für .NET API. Diese finden Sie analog im xml-Datei.