Aspose.Slides for Xamarin

概述

Xamarin是一个用于.NET C#的移动开发框架。Xamarin拥有扩展.NET平台能力的工具和库。它允许开发者为Android操作系统构建应用程序。

Aspose.Slides API在Xamarin平台上运行。为此,Aspose.Slides .NET包为Xamarin添加了一个单独的DLL。Aspose.Slides for Xamarin支持.NET版本中大多数可用功能:

  • 转换和查看演示文稿。
  • 编辑演示文稿中的内容:文本、形状、图表、SmartArt、音频/视频、字体等。
  • 处理/应对动画、2D效果、WordArt等。
  • 处理/处理元数据和文档属性。
  • 打印、克隆、合并、比较、分割等。

我们在本页底部的另一个部分提供了完整功能的比较。

在Aspose.Slides for Xamarin API中,类、命名空间、逻辑和行为尽可能与.NET版本相似。您可以以最小的成本将Aspose.Slides .NET应用程序迁移到Xamarin。

快速示例

您可以使用Aspose.Slides for Xamarin通过Slides for Android构建和利用您的C#应用程序。

我们提供了一个通过Xamarin的Android应用示例,使用Aspose.Slides显示演示文稿幻灯片,并在触摸时在幻灯片上添加一个新形状。您可以在GitHub上找到示例的完整源代码。

让我们开始创建一个Xamarin Android应用:

todo:image_alt_text

首先,我们创建一个将包含图像视图、上一步和下一步按钮的内容布局:

todo:image_alt_text

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="上一步"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/buttonPrev" />
        <Button
            android:text="下一步"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/buttonNext"/>
    </LinearLayout>
</LinearLayout>

在这里,我们引用了包含示例演示文稿(“HelloWorld.pptx”)的"Aspose.Slides.Droid.dll"库,并将其初始化添加到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 - 点击上一步和下一步按钮时显示幻灯片

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

每次点击演示文稿幻灯片都会添加一个随机颜色的椭圆:

todo:image_alt_text

支持的功能

功能  Aspose.Slides for .NET   Aspose.Slides for Xamarin
演示文稿功能    
创建新演示文稿  tick tick
PowerPoint 97 - 2003格式打开/保存  tick tick
PowerPoint 2007格式打开/保存  tick tick
支持PowerPoint 2010扩展  tick tick
支持PowerPoint 2013扩展  tick tick
支持PowerPoint 2016功能  受限 受限
支持PowerPoint 2019功能  受限  受限
PPT到PPTX转换  tick tick
PPTX到PPT转换  tick tick
PPTX在PPT中  受限 受限
主题处理  tick tick
宏处理  tick tick
文档属性处理  tick tick
密码保护  tick tick
快速文本提取  tick tick
嵌入字体  tick tick
评论渲染  tick   tick
中断长时间运行的任务  tick tick  
导出格式:     
PDF  tick tick
XPS  tick tick
HTML  tick tick
TIFF  tick circle
ODP  受限  受限 
SWF  受限 受限
SVG  tick tick
导入格式:     
HTML  受限 受限
ODP  tick tick
THMX  tick tick
母版幻灯片功能:     
访问所有现有母版幻灯片  tick tick
创建/删除母版幻灯片  tick tick
克隆母版幻灯片  tick tick
布局幻灯片功能:     
访问所有现有布局幻灯片  tick tick
创建/删除布局幻灯片  tick tick
克隆布局幻灯片  tick tick
幻灯片功能:     
访问所有现有幻灯片  tick tick
创建/删除幻灯片  tick tick
克隆幻灯片  tick tick
将幻灯片导出为图像  tick tick
创建/编辑/删除幻灯片部分  tick tick
备注幻灯片功能    
访问所有现有备注幻灯片  tick tick
形状功能:     
访问所有幻灯片形状  tick tick
添加新形状  tick tick
克隆形状  tick tick
将单独形状导出为图像  tick tick
支持的形状类型:     
所有预定义形状类型  tick tick
图片框  tick tick
表格  tick tick
图表  tick tick
SmartArt  tick tick
旧版图  tick tick
WordArt  tick tick
OLE、ActiveX对象  受限 受限
视频框  tick tick
音频框  tick tick
连接线  tick tick
组合形状功能:     
访问组合形状  tick tick
创建组合形状  tick tick
取消组合现有组合形状  tick tick
形状特效功能:     
2D特效  受限 受限
3D特效  circle circle
文本功能:     
段落格式  tick tick
部分格式  tick tick
动画功能:     
将动画导出为SWF  circle circle
将动画导出为HTML  circle circle