Aspose.Slides для Xamarin

Обзор

Xamarin — это фреймворк, используемый для мобильной разработки на .NET C#. Xamarin предлагает инструменты и библиотеки, которые расширяют возможности платформы .NET. Он позволяет разработчикам создавать приложения для операционной системы Android.

API Aspose.Slides работает на платформе Xamarin. Для этого пакет Aspose.Slides .NET добавляет отдельную DLL для Xamarin. Aspose.Slides для Xamarin поддерживает большинство функций, доступных в версии .NET:

  • конвертация и просмотр презентаций.
  • редактирование содержимого в презентациях: текст, фигуры, диаграммы, SmartArt, аудио/видео, шрифты и т. д.
  • работа с анимацией, 2D-эффектами, WordArt и т. д.
  • работа с метаданными и свойствами документа.
  • печать, клонирование, слияние, сравнение, разбивка и т. д.

Мы предоставили сравнение всех функций в другом разделе, близком к нижней части этой страницы.

В API Aspose.Slides для Xamarin классы, пространства имен, логика и поведение максимально схожи с версией .NET. Вы можете мигрировать свои приложения Aspose.Slides .NET на Xamarin с минимальными затратами.

Быстрый пример

Вы можете использовать Aspose.Slides для Xamarin для создания и использования своего C# приложения через Slides для Android.

Мы предоставляем пример Android-приложения через Xamarin, которое использует Aspose.Slides для отображения слайдов презентации и добавляет новую фигуру на слайд при касании. Полный исходный код примеров можно найти на GitHub.

Давайте начнем с создания Xamarin Android-приложения:

todo:image_alt_text

Сначала мы создаем контентный макет, который будет содержать изображение, кнопки “Prev” и “Next”:

todo:image_alt_text

XML - content_main.xml - Создание контентного макета

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation=    "vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:showIn="@layout/activity_main">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:id="@+id/linearLayout1">
        <ImageView
            android:src="@android:drawable/ic_menu_gallery"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/imageView"
            android:scaleType="fitCenter" />
    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="10"
        android:id="@+id/linearLayout2">
        <Button
            android:text="Prev"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/buttonPrev" />
        <Button
            android:text="Next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/buttonNext"/>
    </LinearLayout>
</LinearLayout>

Здесь мы ссылаемся на библиотеку “Aspose.Slides.Droid.dll”, которая включает в себя образец презентации (“HelloWorld.pptx”) в Ассеты приложения Xamarin и добавляет инициализацию в MainActivity:

C# - MainActivity.cs - Инициализация

[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
    private Aspose.Slides.Presentation presentation;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
    }

    protected override void OnResume()
    {
        if (presentation == null)
        {
            using (Stream input = Assets.Open("HelloWorld.pptx"))
            {
                presentation = new Aspose.Slides.Presentation(input);
            }
        }
    }

    protected override void OnPause()
    {
        if (presentation != null)
        {
            presentation.Dispose();
            presentation = null;
        }
    }
}

Давайте добавим функцию отображения предыдущих и следующих слайдов при нажатии кнопок:

C# - MainActivity.cs - Отображение слайдов при нажатии кнопки Prev и Next

[Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
    private Button buttonNext;
    private Button buttonPrev;
    ImageView imageView;

    private Aspose.Slides.Presentation presentation;

    private int currentSlideNumber;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.activity_main);
    }

    protected override void OnResume()
    {
        base.OnResume();
        LoadPresentation();
        currentSlideNumber = 0;
        if (buttonNext == null)
        {
            buttonNext = FindViewById<Button>(Resource.Id.buttonNext);
        }

        if (buttonPrev == null)
        {
            buttonPrev = FindViewById<Button>(Resource.Id.buttonPrev);
        }

        if(imageView == null)
        {
            imageView= FindViewById<ImageView>(Resource.Id.imageView);
        }

        buttonNext.Click += ButtonNext_Click;
        buttonPrev.Click += ButtonPrev_Click;
        RefreshButtonsStatus();
        ShowSlide(currentSlideNumber);
    }

    private void ButtonNext_Click(object sender, System.EventArgs e)
    {
        if (currentSlideNumber > (presentation.Slides.Count - 1))
        {
            return;
        }

        ShowSlide(++currentSlideNumber);
        RefreshButtonsStatus();
    }

    private void ButtonPrev_Click(object sender, System.EventArgs e)
    {
        if (currentSlideNumber == 0)
        {
            return;
        }

        ShowSlide(--currentSlideNumber);
        RefreshButtonsStatus();
    }

    protected override void OnPause()
    {
        base.OnPause();
        if (buttonNext != null)
        {
            buttonNext.Dispose();
            buttonNext = null;
        }

        if (buttonPrev != null)
        {
            buttonPrev.Dispose();
            buttonPrev = null;
        }

        if(imageView != null)
        {
            imageView.Dispose();
            imageView = null;
        }

        DisposePresentation();
    }

    private void RefreshButtonsStatus()
    {
        buttonNext.Enabled = currentSlideNumber < (presentation.Slides.Count - 1);
        buttonPrev.Enabled = currentSlideNumber > 0;
    }

    private void ShowSlide(int slideNumber)
    {
        Aspose.Slides.Drawing.Xamarin.Size size = presentation.SlideSize.Size.ToSize();
        Aspose.Slides.Drawing.Xamarin.Bitmap bitmap = presentation.Slides[slideNumber].GetThumbnail(size);
        imageView.SetImageBitmap(bitmap.ToNativeBitmap());
    }

    private void LoadPresentation()
    {
        if(presentation != null)
        {
            return;
        }

        using (Stream input = Assets.Open("HelloWorld.pptx"))
        {
            presentation = new Aspose.Slides.Presentation(input);
        }
    }

    private void DisposePresentation()
    {
        if(presentation == null)
        {
            return;
        }
        
        presentation.Dispose();
        presentation = null;
    }

}

Наконец, давайте реализуем функцию добавления эллипса при касании слайда:

C# - MainActivity.cs - Добавление эллипса при нажатии на слайд

 private void ImageView_Touch(object sender, Android.Views.View.TouchEventArgs e)
{
    int[] location = new int[2];
    imageView.GetLocationOnScreen(location);
    int x = (int)e.Event.GetX();
    int y = (int)e.Event.GetY();
    int posX = x - location[0];
    int posY = y - location[0];
    
    Aspose.Slides.Drawing.Xamarin.Size presSize = presentation.SlideSize.Size.ToSize();

    float coeffX = (float)presSize.Width / imageView.Width;
    float coeffY = (float)presSize.Height / imageView.Height;
    int presPosX = (int)(posX * coeffX);
    int presPosY = (int)(posY * coeffY);
    int width = presSize.Width / 50;

    int height = width;
    Aspose.Slides.IAutoShape ellipse = presentation.Slides[currentSlideNumber].Shapes.AddAutoShape(Aspose.Slides.ShapeType.Ellipse, presPosX, presPosY, width, height);
    ellipse.FillFormat.FillType = Aspose.Slides.FillType.Solid;

    Random random = new Random();
    Aspose.Slides.Drawing.Xamarin.Color slidesColor = Aspose.Slides.Drawing.Xamarin.Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
    ellipse.FillFormat.SolidFillColor.Color = slidesColor;
    ShowSlide(currentSlideNumber);
}

Каждое нажатие на слайд презентации приводит к добавлению эллипса случайного цвета:

todo:image_alt_text

Поддерживаемые функции

ФУНКЦИИ  Aspose.Slides для .NET   Aspose.Slides для Xamarin
Функции презентации    
Создание новых презентаций  tick tick
Открытие/сохранение форматов PowerPoint 97 - 2003  tick tick
Открытие/сохранение форматов PowerPoint 2007  tick tick
Поддержка расширений PowerPoint 2010  tick tick
Поддержка расширений PowerPoint 2013  tick tick
Поддержка функций PowerPoint 2016  ограничена ограничена
Поддержка функций PowerPoint 2019  ограничена  ограничена
Конвертация PPT в PPTX  tick tick
Конвертация PPTX в PPT  tick tick
PPTX в PPT  ограничена ограничена
Обработка тем  tick tick
Обработка макросов  tick tick
Обработка свойств документа  tick tick
Защита паролем  tick tick
Быстрое извлечение текста  tick tick
Встраивание шрифтов  tick tick
Отображение комментариев  tick   tick
Прерывание долгих задач  tick tick  
Форматы экспорта:     
PDF  tick tick
XPS  tick tick
HTML  tick tick
TIFF  tick circle
ODP  ограничена  ограничена
SWF  ограничена ограничена
SVG  tick tick
Форматы импорта:     
HTML  ограничена ограничена
ODP  tick tick
THMX  tick tick
Функции главных слайдов:     
Доступ ко всем существующим главным слайдам  tick tick
Создание/удаление главных слайдов  tick tick
Клонирование главных слайдов  tick tick
Функции макетов слайдов:     
Доступ ко всем существующим макетам слайдов  tick tick
Создание/удаление макетов слайдов  tick tick
Клонирование макетов слайдов  tick tick
Функции слайдов:     
Доступ ко всем существующим слайдам  tick tick
Создание/удаление слайдов  tick tick
Клонирование слайдов  tick tick
Экспорт слайдов в изображения  tick tick
Создание/редактирование/удаление секций слайдов  tick tick
Функции слайдов заметок:     
Доступ ко всем существующим слайдам заметок  tick tick
Функции фигур:     
Доступ ко всем фигурам слайдов  tick tick
Добавление новых фигур  tick tick
Клонирование фигур  tick tick
Экспорт отдельных фигур в изображения  tick tick
Поддерживаемые типы фигур:     
Все предопределенные типы фигур  tick tick
Рамки изображений  tick tick
Таблицы  tick tick
Диаграммы  tick tick
SmartArt  tick tick
Устаревшие диаграммы  tick tick
WordArt  tick tick
OLE, объекты ActiveX  ограничена ограничена
Кадры видео  tick tick
Кадры аудио  tick tick
Соединители  tick tick
Функции групповых фигур:     
Доступ к группам фигур  tick tick
Создание групп фигур  tick tick
Разгруппировка существующих групп фигур  tick tick
Эффекты фигур:     
2D-эффекты  ограничена ограничена
3D-эффекты  circle circle
Текстовые функции:     
Форматирование параграфов  tick tick
Форматирование частей текста  tick tick
Анимационные функции:     
Экспорт анимации в SWF  circle circle
Экспорт анимации в HTML  circle circle