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 for Android.

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

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

todo:image_alt_text

Сначала мы создаём макет контента, который будет содержать ImageView, кнопки 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”) в Assets приложения 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;
        }
    }
}

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

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 for .NET Aspose.Slides for 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