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:

todo:image_alt_text

Najpierw tworzymy układ zawartości, który będzie zawierał widok obrazu oraz przyciski Prev i Next:

todo:image_alt_text

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: todo:image_alt_text

Obsługiwane funkcje

FUNKCJE Aspose.Slides for .NET Aspose.Slides for Xamarin
Funkcje prezentacji:
Tworzenie nowych prezentacji tick tick
Obsługa otwierania/zapisywania formatów PowerPoint 97 - 2003 tick tick
Obsługa otwierania/zapisywania formatów PowerPoint 2007 tick tick
Obsługa rozszerzeń PowerPoint 2010 tick tick
Obsługa rozszerzeń PowerPoint 2013 tick tick
Obsługa funkcji PowerPoint 2016 restricted restricted
Obsługa funkcji PowerPoint 2019 restricted restricted
Konwersja PPT do PPTX tick tick
Konwersja PPTX do PPT tick tick
PPTX w PPT restricted restricted
Przetwarzanie motywów tick tick
Przetwarzanie makr tick tick
Przetwarzanie właściwości dokumentu tick tick
Ochrona hasłem tick tick
Szybkie wyodrębnianie tekstu tick tick
Osadzanie czcionek tick tick
Renderowanie komentarzy tick tick
Przerywanie długotrwałych zadań tick tick
Formaty eksportu:
PDF tick tick
XPS tick tick
HTML tick tick
TIFF tick circle
ODP restricted restricted
SWF restricted restricted
SVG tick tick
Formaty importu:
HTML restricted restricted
ODP tick tick
THMX tick tick
Funkcje slajdów master:
Dostęp do wszystkich istniejących slajdów master tick tick
Tworzenie/usuwanie slajdów master tick tick
Klonowanie slajdów master tick tick
Funkcje układów slajdów:
Dostęp do wszystkich istniejących układów slajdów tick tick
Tworzenie/usuwanie układów slajdów tick tick
Klonowanie układów slajdów tick tick
Funkcje slajdów:
Dostęp do wszystkich istniejących slajdów tick tick
Tworzenie/usuwanie slajdów tick tick
Klonowanie slajdów tick tick
Eksportowanie slajdów do obrazów tick tick
Tworzenie/edycja/usuwanie sekcji slajdów tick tick
Funkcje notatek slajdów:
Dostęp do wszystkich istniejących notatek slajdów tick tick
Funkcje kształtów:
Dostęp do wszystkich kształtów slajdu tick tick
Dodawanie nowych kształtów tick tick
Klonowanie kształtów tick tick
Eksportowanie pojedynczych kształtów do obrazów tick tick
Obsługiwane typy kształtów:
Wszystkie predefiniowane typy kształtów tick tick
Ramki obrazu tick tick
Tabele tick tick
Wykresy tick tick
SmartArt tick tick
Diagram legacy tick tick
WordArt tick tick
Obiekty OLE, ActiveX restricted restricted
Ramki wideo tick tick
Ramki audio tick tick
Łączniki tick tick
Funkcje grupowania kształtów:
Dostęp do grup kształtów tick tick
Tworzenie grup kształtów tick tick
Rozgrupowywanie istniejących grup kształtów tick tick
Funkcje efektów kształtów:
Efekty 2D restricted restricted
Efekty 3D circle circle
Funkcje tekstu:
Formatowanie akapitów tick tick
Formatowanie fragmentów tick tick
Funkcje animacji:
Eksport animacji do SWF circle circle
Eksport animacji do HTML circle circle