Aspose.Slides para Xamarin

Visión general

Xamarin es un framework utilizado para el desarrollo móvil en .NET C#. Xamarin tiene herramientas y bibliotecas que amplían las capacidades de la plataforma .NET. Permite a los desarrolladores crear aplicaciones para el sistema operativo Android.

Aspose.Slides API funciona en la plataforma Xamarin. Para lograrlo, el paquete Aspose.Slides .NET agrega un DLL separado para Xamarin. Aspose.Slides para Xamarin admite la mayoría de las funciones disponibles en la versión .NET:

  • conversión y visualización de presentaciones.
  • edición de contenidos en presentaciones: texto, formas, gráficos, SmartArt, audio/video, fuentes, etc.
  • manejo de animaciones, efectos 2D, WordArt, etc.
  • manejo de metadatos y propiedades del documento.
  • impresión, clonación, combinación, comparación, división, etc.

Proporcionamos una comparación de todas las funciones en otra sección cerca del final de esta página.

En la API Aspose.Slides para Xamarin, las clases, espacios de nombres, lógica y comportamiento son lo más similar posible a la versión .NET. Puede migrar sus aplicaciones Aspose.Slides .NET a Xamarin con costos mínimos.

Ejemplo rápido

Puede usar Aspose.Slides para Xamarin para crear y utilizar su aplicación C# a través de Slides para Android.

Estamos proporcionando un ejemplo de aplicación Android via Xamarin que usa Aspose.Slides para mostrar diapositivas de presentación y agrega una nueva forma en la diapositiva al tocarla. Puede encontrar el código completo de los ejemplos en GitHub.

Comencemos creando una aplicación Xamarin Android:

todo:image_alt_text

Primero, creamos un diseño de contenido que contendrá una vista de imagen, los botones Prev y Next:

todo:image_alt_text

XML - content_main.xml - Crear diseño de contenido

 <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>

Aquí, hacemos referencia a la biblioteca “Aspose.Slides.Droid.dll” que incluye una presentación de ejemplo (“HelloWorld.pptx”) en los Assets de la aplicación Xamarin y añadimos su inicialización a MainActivity:

C# - MainActivity.cs - Inicialización

[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;
        }
    }
}

Agreguemos la función para mostrar las diapositivas Prev y Next al pulsar los botones:

C# - MainActivity.cs - Mostrar diapositivas al hacer clic en los botones Prev y 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;
    }

}

Finalmente, implementemos una función para agregar una forma elíptica al tocar la diapositiva:

C# - MainActivity.cs - Agregar elipse al hacer clic en la diapositiva

 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);
}

Cada clic en la diapositiva de la presentación causa que se añada una elipse de color aleatorio:

todo:image_alt_text

Características compatibles

CARACTERÍSTICAS Aspose.Slides para .NET Aspose.Slides para Xamarin
Características de presentación:
Crear nuevas presentaciones tick tick
Abrir/guardar formatos PowerPoint 97 - 2003 tick tick
Abrir/guardar formatos PowerPoint 2007 tick tick
Soporte de extensiones PowerPoint 2010 tick tick
Soporte de extensiones PowerPoint 2013 tick tick
Soporte de funciones PowerPoint 2016 restringido restringido
Soporte de funciones PowerPoint 2019 restringido restringido
Conversión PPT a PPTX tick tick
Conversión PPTX a PPT tick tick
PPTX dentro de PPT restringido restringido
Procesamiento de temas tick tick
Procesamiento de macros tick tick
Procesamiento de propiedades del documento tick tick
Protección con contraseña tick tick
Extracción rápida de texto tick tick
Incrustación de fuentes tick tick
Renderizado de comentarios tick tick
Interrupción de tareas de larga duración tick tick
Formatos de exportación:
PDF tick tick
XPS tick tick
HTML tick tick
TIFF tick circle
ODP restringido restringido
SWF restringido restringido
SVG tick tick
Formatos de importación:
HTML restringido restringido
ODP tick tick
THMX tick tick
Características de diapositivas maestra:
Acceso a todas las diapositivas maestras existentes tick tick
Crear/eliminar diapositivas maestras tick tick
Clonar diapositivas maestras tick tick
Características de diapositivas de diseño:
Acceso a todas las diapositivas de diseño existentes tick tick
Crear/eliminar diapositivas de diseño tick tick
Clonar diapositivas de diseño tick tick
Características de diapositivas:
Acceso a todas las diapositivas existentes tick tick
Crear/eliminar diapositivas tick tick
Clonar diapositivas tick tick
Exportar diapositivas a imágenes tick tick
Crear/editar/eliminar secciones de diapositivas tick tick
Características de notas:
Acceso a todas las notas existentes tick tick
Características de formas:
Acceso a todas las formas de la diapositiva tick tick
Agregar nuevas formas tick tick
Clonar formas tick tick
Exportar formas independientes a imágenes tick tick
Tipos de forma admitidos:
Todas las formas predefinidas tick tick
Marcos de imagen tick tick
Tablas tick tick
Gráficos tick tick
SmartArt tick tick
Diagramas heredados tick tick
WordArt tick tick
OLE, objetos ActiveX restringido restringido
Marcos de video tick tick
Marcos de audio tick tick
Conectores tick tick
Características de grupos de formas:
Acceso a grupos de formas tick tick
Crear grupos de formas tick tick
Desagrupar grupos de formas existentes tick tick
Características de efectos de forma:
Efectos 2D restringido restringido
Efectos 3D circle circle
Características de texto:
Formato de párrafos tick tick
Formato de porciones tick tick
Características de animación:
Exportar animación a SWF circle circle
Exportar animación a HTML circle circle