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:
Сначала мы создаём макет контента, который будет содержать ImageView, кнопки 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”) в 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);
}
Каждый клик по слайду презентации добавляет эллипс случайного цвета:
Поддерживаемые функции
| ФУНКЦИИ | Aspose.Slides for .NET | Aspose.Slides for 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 |
|
|