Aspose.Slides dla Xamarin
Wprowadzenie
Xamarin jest frameworkiem używanym do tworzenia aplikacji mobilnych w .NET C#. Xamarin posiada narzędzia i biblioteki, które rozszerzają możliwości platformy .NET. Umożliwia programistom budowanie aplikacji dla systemu operacyjnego Android.
API Aspose.Slides działa na platformie Xamarin. Aby to osiągnąć, pakiet Aspose.Slides .NET dodaje osobny plik DLL dla Xamarin. Aspose.Slides dla Xamarin obsługuje większość funkcji dostępnych w wersji .NET:
- konwertowanie i przeglądanie prezentacji.
- edytowanie zawartości prezentacji: tekst, kształty, wykresy, SmartArt, audio/wideo, czcionki itp.
- obsługa animacji, efektów 2D, WordArt itp.
- obsługa metadanych i właściwości dokumentu.
- drukowanie, klonowanie, scalanie, porównywanie, dzielenie itp.
Porównanie pełnych funkcji znajduje się w innej sekcji, blisko końca tej strony.
W API Aspose.Slides dla Xamarin klasy, przestrzenie nazw, logika i zachowanie są tak bardzo podobne do wersji .NET, jak to możliwe. Możesz migrować swoje aplikacje Aspose.Slides .NET do Xamarin przy minimalnych kosztach.
Szybki przykład
Możesz używać Aspose.Slides dla Xamarin, aby tworzyć i wykorzystywać swoją aplikację C# poprzez Slides for Android.
Udostępniamy przykład aplikacji Android opartej na Xamarin, która używa Aspose.Slides do wyświetlania slajdów prezentacji i dodaje nowy kształt na slajdzie po dotknięciu. Pełne źródła przykładów znajdziesz naGitHub.
Zacznijmy od stworzenia aplikacji Xamarin Android:
Najpierw tworzymy układ zawartości, który będzie zawierał widok obrazu oraz przyciski Prev i Next:
XML - content_main.xml - Utwórz układ zawartości
<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>
Tutaj odwołujemy się do biblioteki “Aspose.Slides.Droid.dll”, która zawiera przykładową prezentację (“HelloWorld.pptx”) w zasobach aplikacji Xamarin i dodaje jej inicjalizację do klasy MainActivity:
C# - MainActivity.cs - Inicjalizacja
[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;
}
}
}
Dodajmy funkcję wyświetlającą poprzednie i następne slajdy po naciśnięciu przycisków:
C# - MainActivity.cs - Wyświetlanie slajdów po kliknięciu przycisków Prev i 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;
}
}
Na koniec zaimplementujmy funkcję dodającą elipsę po dotknięciu slajdu:
C# - MainActivity.cs - Dodaj elipsę po kliknięciu na slajdzie
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);
}
Każde kliknięcie na slajdzie prezentacji powoduje dodanie elipsy o losowym kolorze:
Obsługiwane funkcje
| FUNKCJE | Aspose.Slides for .NET | Aspose.Slides for Xamarin |
|---|---|---|
| Funkcje prezentacji: | ||
| Tworzenie nowych prezentacji |
|
|
| Obsługa otwierania/zapisywania formatów PowerPoint 97 - 2003 |
|
|
| Obsługa otwierania/zapisywania formatów PowerPoint 2007 |
|
|
| Obsługa rozszerzeń PowerPoint 2010 |
|
|
| Obsługa rozszerzeń PowerPoint 2013 |
|
|
| Obsługa funkcji PowerPoint 2016 | restricted | restricted |
| Obsługa funkcji PowerPoint 2019 | restricted | restricted |
| Konwersja PPT do PPTX |
|
|
| Konwersja PPTX do PPT |
|
|
| PPTX w PPT | restricted | restricted |
| Przetwarzanie motywów |
|
|
| Przetwarzanie makr |
|
|
| Przetwarzanie właściwości dokumentu |
|
|
| Ochrona hasłem |
|
|
| Szybkie wyodrębnianie tekstu |
|
|
| Osadzanie czcionek |
|
|
| Renderowanie komentarzy |
|
|
| Przerywanie długotrwałych zadań |
|
|
| Formaty eksportu: | ||
|
|
|
|
| XPS |
|
|
| HTML |
|
|
| TIFF |
|
|
| ODP | restricted | restricted |
| SWF | restricted | restricted |
| SVG |
|
|
| Formaty importu: | ||
| HTML | restricted | restricted |
| ODP |
|
|
| THMX |
|
|
| Funkcje slajdów master: | ||
| Dostęp do wszystkich istniejących slajdów master |
|
|
| Tworzenie/usuwanie slajdów master |
|
|
| Klonowanie slajdów master |
|
|
| Funkcje układów slajdów: | ||
| Dostęp do wszystkich istniejących układów slajdów |
|
|
| Tworzenie/usuwanie układów slajdów |
|
|
| Klonowanie układów slajdów |
|
|
| Funkcje slajdów: | ||
| Dostęp do wszystkich istniejących slajdów |
|
|
| Tworzenie/usuwanie slajdów |
|
|
| Klonowanie slajdów |
|
|
| Eksportowanie slajdów do obrazów |
|
|
| Tworzenie/edycja/usuwanie sekcji slajdów |
|
|
| Funkcje notatek slajdów: | ||
| Dostęp do wszystkich istniejących notatek slajdów |
|
|
| Funkcje kształtów: | ||
| Dostęp do wszystkich kształtów slajdu |
|
|
| Dodawanie nowych kształtów |
|
|
| Klonowanie kształtów |
|
|
| Eksportowanie pojedynczych kształtów do obrazów |
|
|
| Obsługiwane typy kształtów: | ||
| Wszystkie predefiniowane typy kształtów |
|
|
| Ramki obrazu |
|
|
| Tabele |
|
|
| Wykresy |
|
|
| SmartArt |
|
|
| Diagram legacy |
|
|
| WordArt |
|
|
| Obiekty OLE, ActiveX | restricted | restricted |
| Ramki wideo |
|
|
| Ramki audio |
|
|
| Łączniki |
|
|
| Funkcje grupowania kształtów: | ||
| Dostęp do grup kształtów |
|
|
| Tworzenie grup kształtów |
|
|
| Rozgrupowywanie istniejących grup kształtów |
|
|
| Funkcje efektów kształtów: | ||
| Efekty 2D | restricted | restricted |
| Efekty 3D |
|
|
| Funkcje tekstu: | ||
| Formatowanie akapitów |
|
|
| Formatowanie fragmentów |
|
|
| Funkcje animacji: | ||
| Eksport animacji do SWF |
|
|
| Eksport animacji do HTML |
|
|