13 декабря 2024
CodePorting.Wrapper Cs2Python — это инструмент, который позволяет оборачивать готовые .NET проекты, написанные на C#, в модули, совместимые с Python. Это упрощает использование существующих .NET проектов в Python без необходимости писать с нуля либо транслировать их исходный код. Использование этого инструмента экономит время и усилия разработчиков, обеспечивая при этом высокую производительность продукта в Python. В этой статье мы рассмотрим пять самых популярных .NET проектов, обернутых для использования в Python с помощью инструмента CodePorting.Wrapper Cs2Python.
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 |
Количество строк исходного кода C# |
---|
4,100,000 |
Aspose.Words — это мощная библиотека для работы с документами Word, которая предоставляет широкий набор функций для создания, редактирования, преобразования и рендеринга документов. Она поддерживает множество форматов, включая DOC, DOCX, PDF, HTML и другие. Aspose.Words позволяет разработчикам автоматизировать обработку документов без необходимости использования Microsoft Word или других сторонних приложений.
Первая версия обёрнутой для Python библиотеки была выпущена в 2021 году. С тех пор она продолжает развиваться вместе с увеличением возможностей обёрточного инструмента Cs2Python. Весь Python API генерируется автоматически на основе C# API библиотеки.
Пример на 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")
Пример на 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")
Пример на 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-проектах.
Количество строк исходного кода C# |
---|
2,860,000 |
Aspose.Slides — это мощная библиотека для работы с презентациями, которая позволяет разработчикам создавать, изменять, конвертировать и рендерить презентации без необходимости использовать такие приложения, как Microsoft PowerPoint. Она поддерживает множество форматов, включая PPT, PPTX, PDF, HTML и другие.
Первая версия обёрнутой для Python библиотеки была выпущена в том же 2021 году и сразу же получила признание пользователей. Сравним оригинальный C# API и автоматически сгенерированный API для Python.
На 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)
На 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)
На 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)
Как видим, разница снова заключается только в стиле написания кода, свойственном каждому из языков программирования.
Количество строк исходного кода 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.
Количество строк исходного кода 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__
и доступ к элементам через квадратные скобки ([]
). Благодаря этому, взаимодействие с коллекциями, получаемыми из обернутых библиотек, становится столь же удобным и интуитивным, как и работа с любыми другими стандартными коллекциями языка.
Количество строк исходного кода C# |
---|
397,000 |
Aspose.Email — это библиотека для работы с электронной почтой, которая поддерживает множество сценариев использования и протоколов, таких как SMTP, POP3, IMAP, Exchange Web Services (EWS), WebDav, и другие.
На 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)
На 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:
Если вы хотите так же успешно обернуть свой .NET проект корпоративного уровня для использования в Python, обращайтесь к нам, и мы с радостью поможем вам достичь ваших целей!