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
:
- 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()
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:
- 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()
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:
- as_file_font_source()
- as_folder_font_source()
- as_memory_font_source()
- as_stream_font_source()
- as_system_font_source()
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:
- 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)
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.