13 декабря 2024

Топ 5 .NET проектов, обернутых для Python с использованием Cs2Python

CodePorting.Wrapper Cs2Python — это инструмент, который позволяет оборачивать готовые .NET проекты, написанные на C#, в модули, совместимые с Python. Это упрощает использование существующих .NET проектов в Python без необходимости писать с нуля либо транслировать их исходный код. Использование этого инструмента экономит время и усилия разработчиков, обеспечивая при этом высокую производительность продукта в Python. В этой статье мы рассмотрим пять самых популярных .NET проектов, обернутых для использования в Python с помощью инструмента CodePorting.Wrapper Cs2Python.

Адаптация библиотек Aspose для Python

Aspose – это ведущая компания, специализирующаяся на разработке высококачественных библиотек для работы с различными форматами файлов. Их продукты широко известны среди разработчиков благодаря своей надежности и богатому функционалу. Изначально все эти библиотеки создавались на языке C#, и со временем они стали незаменимыми инструментами для .NET разработчиков по всему миру.

Чтобы расширить аудиторию, компания Aspose приняла решение о создании версий своих библиотек для других популярных языков программирования, таких как Java, C++ и Python. Однако, учитывая огромный объем кода (несколько миллионов строк в каждом проекте), создание параллельных кодовых баз на нескольких языках программирования и их синхронизация значительно усложнили бы процесс разработки. Поэтому было принято решение использовать кодовую базу на C# в качестве основной и транспилировать её на C++ и Java. А для Python, автоматически создавать оберточный код, позволяющий использовать готовую .NET сборку внутри расширения Python. Для этого был создан инструмент CodePorting.Wrapper Cs2Python, который позволяет легко адаптировать .NET проекты для использования в среде Python.

Мы рассмотрим пять самых популярных продуктов Aspose для Python по количеству загрузок в PyPI:

Продукт Количество загрузок
1 Aspose.Words 1,287,268
2 Aspose.Slides 488,062
3 Aspose.Cells 286,120
4 Aspose.PDF 177,246
5 Aspose.Email 136,465

1. Aspose.Words

Количество строк исходного кода C#
4,100,000

Aspose.Words — это мощная библиотека для работы с документами Word, которая предоставляет широкий набор функций для создания, редактирования, преобразования и рендеринга документов. Она поддерживает множество форматов, включая DOC, DOCX, PDF, HTML и другие. Aspose.Words позволяет разработчикам автоматизировать обработку документов без необходимости использования Microsoft Word или других сторонних приложений.

Первая версия обёрнутой для Python библиотеки была выпущена в 2021 году. С тех пор она продолжает развиваться вместе с увеличением возможностей обёрточного инструмента Cs2Python. Весь Python API генерируется автоматически на основе C# API библиотеки.

Сравнение API C# и Python

  1. Создание нового документа и добавление текста

Пример на C#:

using Aspose.Words;

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Writeln("Hello, World!");
doc.Save("HelloWorld.docx");

Пример на Python:

import aspose.words as aw

doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.writeln("Hello, World!")
doc.save("HelloWorld.docx")
  1. Конвертация документа из DOCX в PDF

Пример на C#:

using Aspose.Words;

Document doc = new Document("Document.docx");
doc.Save("Document.pdf");

На Python:

import aspose.words as aw

doc = aw.Document("Document.docx")
doc.save("Document.pdf")
  1. Объединение двух документов

Пример на C#:

using Aspose.Words;

Document doc1 = new Document("Document1.docx");
Document doc2 = new Document("Document2.docx");

DocumentBuilder builder = new DocumentBuilder(doc1);
builder.MoveToDocumentEnd();
builder.InsertDocument(doc2, ImportFormatMode.KeepSourceFormatting);

doc1.Save("MergedDocument.docx");

На Python:

import aspose.words as aw

doc1 = aw.Document("Document1.docx")
doc2 = aw.Document("Document2.docx")

builder = aw.DocumentBuilder(doc1)
builder.move_to_document_end()
builder.insert_document(doc2, aw.ImportFormatMode.KEEP_SOURCE_FORMATTING)

doc1.save("MergedDocument.docx")

Как видим, API на обоих языках очень похожи, что упрощает переход между C# и Python для разработчиков. Кроме того, упрощается документирование и сопровождение библиотек Aspose. Теперь, благодаря инструменту CodePorting.Wrapper Cs2Python, разработчики могут использовать мощные возможности Aspose.Words в своих Python-проектах.

2. Aspose.Slides

Количество строк исходного кода C#
2,860,000

Aspose.Slides — это мощная библиотека для работы с презентациями, которая позволяет разработчикам создавать, изменять, конвертировать и рендерить презентации без необходимости использовать такие приложения, как Microsoft PowerPoint. Она поддерживает множество форматов, включая PPT, PPTX, PDF, HTML и другие.

Первая версия обёрнутой для Python библиотеки была выпущена в том же 2021 году и сразу же получила признание пользователей. Сравним оригинальный C# API и автоматически сгенерированный API для Python.

Примеры кода: сравнение API C# и Python

  1. Создание новой презентации

На C#:

using Aspose.Slides;

Presentation pres = new Presentation();
pres.Save("NewPresentation.pptx", SaveFormat.Pptx);

На Python:

import aspose.slides as slides

pres = slides.Presentation()
pres.save("NewPresentation.pptx", slides.SaveFormat.Pptx)
  1. Добавление слайда

На C#:

using Aspose.Slides;

Presentation pres = new Presentation("ExistingPresentation.pptx");

ISlide slide = pres.Slides.AddEmptySlide(pres.LayoutSlides[0]);
IAutoShape textbox = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50, 500, 200);
textbox.TextFrame.Text = "Hello, Aspose.Slides!";

pres.Save("UpdatedPresentation.pptx", SaveFormat.Pptx);

На Python:

import aspose.slides as slides

pres = slides.Presentation("ExistingPresentation.pptx")

slide = pres.slides.add_empty_slide(pres.layout_slides[0])
textbox = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 50, 50, 500, 200)
textbox.text_frame.text = "Hello, Aspose.Slides!"

pres.save("UpdatedPresentation.pptx", slides.SaveFormat.Pptx)
  1. Конвертация в PDF

На C#:

using Aspose.Slides;

Presentation pres = new Presentation("ExistingPresentation.pptx");
pres.Save("ConvertedPresentation.pdf", SaveFormat.Pdf);

На Python:

import aspose.slides as slides

pres = slides.Presentation("ExistingPresentation.pptx")
pres.save("ConvertedPresentation.pdf", slides.SaveFormat.Pdf)

Как видим, разница снова заключается только в стиле написания кода, свойственном каждому из языков программирования.

3. Aspose.Cells

Количество строк исходного кода C#
600,000

Aspose.Cells — это мощный API для работы с файлами Excel, который позволяет разработчикам создавать, редактировать, форматировать и конвертировать электронные таблицы в своих приложениях, и поддерживает множество форматов, включая XLS, XLSX, CSV, PDF и другие.

Aspose.Cells может обрабатывать огромные объемы данных в электронных таблицах, что предъявляет высокие требования к её производительности. Благодаря обертыванию высокопроизводительного компилируемого C# кода, удалось сохранить эту производительность при использовании библиотеки в Python. Трансляция же её кода на Python могла бы значительно снизить скорость выполнения операций.

Пример на C#:

using Aspose.Cells;
using System;

Workbook workbook = new Workbook("HugeDataWithComplexFormulas.xlsx");
workbook.CalculateFormula();

Worksheet sheet = workbook.Worksheets[0];
Cell resultCell = sheet.Cells["A1"];
Console.WriteLine("Результат вычисления: " + resultCell.Value);

Пример на Python:

import aspose.cells as cells

workbook = cells.Workbook("HugeDataWithComplexFormulas.xlsx")
workbook.calculate_formula()

sheet = workbook.worksheets[0]
result_cell = sheet.cells.get("A1")
print("Результат вычисления:", result_cell.value)

Этот код иллюстрирует использование Aspose.Cells для обработки большого объема данных и вычисления формул в C# и Python. Метод calculate_formula выполняет значительную работу, обеспечивая корректное вычисление всех формул в электронной таблице без потери производительности в Python.

4. Aspose.PDF

Количество строк исходного кода C#
3,655,000

Aspose.PDF — это мощная библиотека для работы с PDF-документами, которая позволяет разработчикам создавать, читать, редактировать и конвертировать PDF-документы программно.

Как мы можем видеть, Aspose.PDF представляет собой большой и сложный проект с обширной кодовой базой на языке C#. Методы библиотеки могут возвращать не только простые типы данных, но и сложные структуры, такие как коллекции и объекты. Одной из сильных сторон инструмента CodePorting.Wrapper Cs2Python является его способность поддерживать такие типы данных в Python.

Пример на C#:

using Aspose.Pdf;
using Aspose.Pdf.Text;
using System;
using System.Collections.Generic;

Document document = new Document("Sample.pdf");
Page page = document.Pages[1];

ImagePlacementAbsorber imageAbsorber = new ImagePlacementAbsorber();
page.Accept(imageAbsorber);

// Получение первых трех изображений с текущей страницы
List<ImagePlacement> images = imageAbsorber.ImagePlacements.Take(3).ToList();

foreach (ImagePlacement image in images)
{
    Console.WriteLine("Image found at: " + image.Rectangle);
}

На Python:

import aspose.pdf as pdf

document = pdf.Document("Sample.pdf")
page = document.pages[1]

image_placement_absorber = pdf.ImagePlacementAbsorber()
page.accept(image_placement_absorber)

# Получение первых трех изображений с текущей страницы
images = image_placement_absorber.image_placements[:3]

for image in images:
    print("Image found at:", image.rectangle)

Коллекции, передаваемые между обернутой библиотекой и Python кодом, поддерживают все стандартные методы и операции Python для последовательностей. Это включает методы, такие как pop, index, count, sort, reverse, copy, append, remove, clear, contains, а также поддержку итерации с помощью __iter__ и доступ к элементам через квадратные скобки ([]). Благодаря этому, взаимодействие с коллекциями, получаемыми из обернутых библиотек, становится столь же удобным и интуитивным, как и работа с любыми другими стандартными коллекциями языка.

5. Aspose.Email

Количество строк исходного кода C#
397,000

Aspose.Email — это библиотека для работы с электронной почтой, которая поддерживает множество сценариев использования и протоколов, таких как SMTP, POP3, IMAP, Exchange Web Services (EWS), WebDav, и другие.

Сравнение API C# и Python

  1. Создание и отправка письма

На C#:

using Aspose.Email;
using Aspose.Email.Clients.Smtp;

var message = new MailMessage();
message.From = new MailAddress("sender@example.com");
message.To.Add(new MailAddress("receiver@example.com"));
message.Subject = "Test Email";
message.Body = "This is a test email sent using Aspose.Email.";

var client = new SmtpClient("smtp.server.com", 25, "username", "password");
client.Send(message);

На Python:

import aspose.email as ae

message = ae.MailMessage()
message.from_address = ae.MailAddress("sender@example.com")
message.to.append(ae.MailAddress("receiver@example.com"))
message.subject = "Test Email"
message.body = "This is a test email sent using Aspose.Email."

client = ae.SmtpClient("smtp.server.com", 25, "username", "password")
client.send(message)
  1. Чтение PST файла

На C#:

using Aspose.Email;
using Aspose.Email.Storage.Pst;
using System;

void PrintFolderInfo(FolderInfo folder)
{
    Console.WriteLine($"Folder: {folder.DisplayName}, Message Count: {folder.ContentCount}");
    foreach (var subFolder in folder.GetSubFolders())
    {
        PrintFolderInfo(subFolder);
    }
}

var personalStorage = PersonalStorage.FromFile("path/to/file.pst");
PrintFolderInfo(personalStorage.RootFolder);

На Python:

import aspose.email as ae
import aspose.email.storage.pst as pst

def print_folder_info(folder):
    print(f"Folder: {folder.display_name}, Message Count: {folder.content_count}")
    for sub_folder in folder.get_sub_folders():
        print_folder_info(sub_folder)

personal_storage = pst.PersonalStorage.from_file("path/to/file.pst")
print_folder_info(personal_storage.root_folder)

В этом примере мы рекурсивно проходим по всем папкам в PST файле и выводим количество сообщений в каждой папке, используя свойство FolderInfo.ContentCount (FolderInfo.content_count в Python).

Как видим, снова, интерфейс Python API идентичен интерфейсу C# API. Это достигается благодаря автоматическому созданию промежуточного слоя кода, который реализует обертки или биндинги для классов, методов и свойств на языке Python. Эти биндинги позволяют получить доступ к функционалу, написанному на C#, из среды Python.

Заключение

В заключение хотелось бы отметить ключевые преимущества, которые предоставляет обертывание .NET библиотек для Python при помощи инструмента CodePorting.Wrapper Cs2Python:

  1. Сохранение функциональности: Обертывание позволяет использовать все возможности и функции оригинальной .NET библиотеки в Python, не теряя при этом производительности и функциональности.
  2. Экономия времени и ресурсов: Вместо переписывания кода с нуля, разработчики могут быстро обернуть существующие .NET библиотеки для использования в Python, что значительно сокращает время разработки.
  3. Широкая совместимость: Обернутые библиотеки могут работать на различных платформах, таких как Windows, Linux и macOS.
  4. Автоматическая генерация API: Весь Python API генерируется автоматически на основе C# API библиотеки, что упрощает процесс интеграции и обеспечивает соответствие функциональности.

Если вы хотите так же успешно обернуть свой .NET проект корпоративного уровня для использования в Python, обращайтесь к нам, и мы с радостью поможем вам достичь ваших целей!

Связанные новости

Связанные статьи