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