Различия в версиях Python и .NET
Aspose.Words для Python via .NET является оболочкой Aspose.Words для .NET, поэтому оба продукта обладают практически одинаковым набором функций. Тем не менее, есть некоторые нюансы работы и различия в функциях и API, которые описаны на этой странице.
Различия в характеристиках
Из-за процесса обновления некоторые функции недоступны в версии Python. Вот список наиболее заметных функций, которые в настоящее время недоступны в версии Python.
- Реализация интерфейсов пока не поддерживается, поэтому невозможно использовать обратные вызовы, такие как IWarningCallback, IReplacingCallback, IFieldUpdatingCallback, IFieldMergingCallback и т.д.
- Функция печати недоступна, поскольку версия .NET Standard 2.0 из Aspose.Words используется в качестве серверной части версии python, которая также не предоставляет эту функциональность.
- С массивами имен полей и значений полей в качестве источника данных обеспечивается только простая функциональность Mail Merge.
- DocumentVisitor реализация в настоящее время невозможна из кода Python.
Преобразование Aspose.Words объектов в Python
Хотя приведение типов не является естественным для разработчиков Python, некоторые задачи невозможно выполнить без приведения узлов или полей документов к конкретному типу. Aspose.Words для Python via .NET предусмотрены специальные методы, которые позволяют приводить объекты, где это необходимо.
Узлы литья
Базовым классом для всех узлов документа в Aspose.Words DOM является класс Node. Например, метод get_child возвращает экземпляр класса Node, но если вам нужно изменить возвращаемый узел, в большинстве случаев вам следует привести его к конкретному типу. Следующий код демонстрирует, как изменить цвет первого шрифта Run в документе:
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")
Приведение также может потребоваться при использовании метода 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")
Как вы могли заметить, там, где в коде C# вы использовали бы (Paragraph)node
для приведения в действие, в коде Python вы должны использовать метод node.as_paragraph()
. В версии Python класса Aspose.Words Node представлена следующая ссылка на 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()
Метод as_xxx
вызывает RuntimeError
с сообщением, подобным следующему, если узел не может быть привязан к указанному типу:
RuntimeError: Proxy error(InvalidCastException): Unable to cast object of type ‘Aspose.Words.XXX’ to type ‘Aspose.Words.Drawing.YYY’.
Литейные поля
Аналогичная ситуация сложилась и с полями. В следующем примере кода показано, как заменить гиперссылки:
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")
Как вы могли заметить, объект Field также предоставляет набор методов as_xxx
, которые перечислены ниже:
- 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()
Стили кастинга
Приведение также требуется для работы со стилями таблиц:
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")
Приведение в действие элементов управления Ole
Следующий пример кода демонстрирует, как считывать свойства элемента управления 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)
Приведение в действие источников шрифтов
класс FontSourceBase предоставляет набор из as_xxx
методов, которые перечислены ниже:
- as_file_font_source()
- as_folder_font_source()
- as_memory_font_source()
- as_stream_font_source()
- as_system_font_source()
Доступ к свойствам индексатора
Aspose.Words для Python допускает свойства индексатора только по типу int, однако в .NET можно использовать другие типы, например strings. Чтобы заполнить этот пробел, в следующих классах есть дополнительные методы:
- FormFieldCollection
- FontInfoCollection
- CustomXmlPartCollection
- CustomXmlPropertyCollection
- BuiltInDocumentProperties
- CustomDocumentProperties
- BookmarksOutlineLevelCollection
- VbaModuleCollection
- BookmarkCollection
- BorderCollection
- HeaderFooterCollection
- StyleCollection
- VariableCollection
API Присвоение имен членам
Чтобы быть ближе к миру Python, в API элементах Aspose.Words для Python via .NET используется стиль питонической змеи, однако в большинстве случаев они имеют однозначный аналог в Aspose.Words для .NET API. Вы можете найти эти аналоги в xml-файле.