Различия в версиях 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_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, которые перечислены ниже:

Стили кастинга

Приведение также требуется для работы со стилями таблиц:

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 методов, которые перечислены ниже:

Доступ к свойствам индексатора

Aspose.Words для Python допускает свойства индексатора только по типу int, однако в .NET можно использовать другие типы, например strings. Чтобы заполнить этот пробел, в следующих классах есть дополнительные методы:

API Присвоение имен членам

Чтобы быть ближе к миру Python, в API элементах Aspose.Words для Python via .NET используется стиль питонической змеи, однако в большинстве случаев они имеют однозначный аналог в Aspose.Words для .NET API. Вы можете найти эти аналоги в xml-файле.