现代 API

引言

从历史上看,Aspose Slides 依赖于 System.Drawing,并在公共 API 中包含以下来自该库的类:

自版本 24.4 起,此公共 API 被声明为不推荐使用。

由于 .NET6 及更高版本中对非 Windows 版本的 System.Drawing 支持被移除(重大变化),Slides 实现了一个双库版本的方法:

Aspose.Slides.NET6.CrossPlatform 的不便之处在于,它在同一个命名空间中实现了自己版本的 System.Drawing(以支持与公共 API 的向后兼容)。因此,当同时使用 Aspose.Slides.NET6.CrossPlatform 和来自 .NETFramrwork 或 System.Drawing.Common 包的 System.Drawing 时,除非使用别名,否则会发生名称冲突。

为了摆脱主 Aspose.Slides.NET 包中对 System.Drawing 的依赖,我们添加了所谓的“现代 API”——即应当替代不推荐使用的 API 的 API,其签名包含对来自 System.Drawing 的以下类型的依赖:Image 和 Bitmap。PrinterSettings 和 Graphics 被声明为不推荐使用,其支持已从公共 Slides API 中移除。

带有 System.Drawing 依赖项的不推荐使用的公共 API 的移除将在 24.8 版本中进行。

现代 API

将以下类和枚举添加到公共 API:

  • Aspose.Slides.IImage - 表示栅格或矢量图像。
  • Aspose.Slides.ImageFormat - 表示图像的文件格式。
  • Aspose.Slides.Images - 实例化和处理 IImage 接口的方法。

请注意,IImage 是可处置的(它实现了 IDisposable 接口,其使用应被包裹在 using 中或以其他方便的方式处置)。

使用新 API 的典型场景可能如下所示:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    // 从磁盘文件实例化 IImage 的可处置实例。  
    using (IImage image = Images.FromFile("image.png"))
    {
        // 通过将 IImage 的一个实例添加到演示文稿的图像中来创建 PowerPoint 图像。
        ppImage = pres.Images.AddImage(image);
    }

    // 在幻灯片 #1 上添加图片形状
    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);

    // 获取表示幻灯片 #1 的 IImage 实例。
    using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
    {
        // 将图像保存到磁盘。
        slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
    }
}

用现代 API 替换旧代码

为了方便过渡,新的 IImage 接口重复了 Image 和 Bitmap 类的独立签名。一般来说,您只需用新的方法替换对旧方法的调用,该方法使用 System.Drawing。

获取幻灯片缩略图

使用不推荐使用的 API 的代码:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].GetThumbnail().Save("slide1.png");
}

现代 API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].GetImage().Save("slide1.png");
}

获取形状缩略图

使用不推荐使用的 API 的代码:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].Shapes[0].GetThumbnail().Save("shape.png");
}

现代 API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    pres.Slides[0].Shapes[0].GetImage().Save("shape.png");
}

获取演示文稿缩略图

使用不推荐使用的 API 的代码:

using (Presentation pres = new Presentation("pres.pptx"))
{
    var bitmaps = pres.GetThumbnails(new RenderingOptions(), new Size(1980, 1028));
    try
    {
        for (var index = 0; index < bitmaps.Length; index++)
        {
            Bitmap thumbnail = bitmaps[index];
            thumbnail.Save($"slide{index}.png", ImageFormat.Png);
        }
    }
    finally
    {
        foreach (Bitmap bitmap in bitmaps)
        {
            bitmap.Dispose();
        }
    }
}

现代 API:

using (Presentation pres = new Presentation("pres.pptx"))
{
    var images = pres.GetImages(new RenderingOptions(), new Size(1980, 1028));
    try
    {
        for (var index = 0; index < images.Length; index++)
        {
            IImage thumbnail = images[index];
            thumbnail.Save($"slide{index}.png", ImageFormat.Png);
        }
    }
    finally
    {
        foreach (IImage image in images)
        {
            image.Dispose();
        }
    }
}

向演示文稿添加图片

使用不推荐使用的 API 的代码:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    using (Image image = Image.FromFile("image.png"))
    {
        ppImage = pres.Images.AddImage(image);
    }

    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
}

现代 API:

using (Presentation pres = new Presentation())
{
    IPPImage ppImage;
    using (IImage image = Aspose.Slides.Images.FromFile("image.png"))
    {
        ppImage = pres.Images.AddImage(image);
    }

    pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
}

要删除的方法/属性及其在现代 API 中的替代

Presentation

方法签名 替代方法签名
public Bitmap[] GetThumbnails(IRenderingOptions options) GetImages(IRenderingOptions options)
public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides) GetImages(IRenderingOptions options, int[] slides)
public Bitmap[] GetThumbnails(IRenderingOptions options, float scaleX, float scaleY) GetImages(IRenderingOptions options, float scaleX, float scaleY)
public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides, float scaleX, float scaleY) GetImages(IRenderingOptions options, int[] slides, float scaleX, float scaleY)
public Bitmap[] GetThumbnails(IRenderingOptions options, Size imageSize) GetImages(IRenderingOptions options, Size imageSize)
public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides, Size imageSize) GetImages(IRenderingOptions options, int[] slides, Size imageSize)
public void Save(string fname, SaveFormat format, HttpResponse response, bool showInline) 将完全删除
public void Save(string fname, SaveFormat format, ISaveOptions options, HttpResponse response, bool showInline) 将完全删除
public void Print() 将完全删除
public void Print(PrinterSettings printerSettings) 将完全删除
public void Print(string printerName) 将完全删除
public void Print(PrinterSettings printerSettings, string presName) 将完全删除

Shape

方法签名 替代方法签名
public Bitmap GetThumbnail() GetImage
public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY)

Slide

方法签名 替代方法签名
public Bitmap GetThumbnail(float scaleX, float scaleY) GetImage(float scaleX, float scaleY)
public Bitmap GetThumbnail() GetImage
public Bitmap GetThumbnail(IRenderingOptions options) GetImage(IRenderingOptions options)
public Bitmap GetThumbnail(Size imageSize) GetImage(Size imageSize)
public Bitmap GetThumbnail(ITiffOptions options) GetImage(ITiffOptions options)
public Bitmap GetThumbnail(IRenderingOptions options, float scaleX, float scaleY) GetImage(IRenderingOptions options, float scaleX, float scaleY)
public Bitmap GetThumbnail(IRenderingOptions options, Size imageSize) GetImage(IRenderingOptions options, Size imageSize)
public void RenderToGraphics(IRenderingOptions options, Graphics graphics) 将完全删除
public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY) 将完全删除
public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize) 将完全删除

输出

方法签名 替代方法签名
public IOutputFile Add(string path, Image image) Add(string path, IImage image)

ImageCollection

方法签名 替代方法签名
IPPImage AddImage(Image image) AddImage(IImage image)

ImageWrapperFactory

方法签名 替代方法签名
IImageWrapper CreateImageWrapper(Image image) CreateImageWrapper(IImage image)

PPImage

方法/属性签名 替代方法签名
void ReplaceImage(Image newImage) ReplaceImage(IImage newImage)
Image SystemImage { get; } IImage Image { get; }

PatternFormat

方法签名 替代方法签名
Bitmap GetTileImage(Color background, Color foreground) GetTile(Color background, Color foreground)
Bitmap GetTileImage(Color styleColor) GetTile(Color styleColor)

IPatternFormatEffectiveData

方法签名 替代方法签名
Bitmap GetTileImage(Color background, Color foreground) GetTileIImage(SlidesImage image)

将停止对 Aspose.Slides.NET6.CrossPlatform 的支持

在发布 Aspose.Slides.NET 版本 24.8 之后,将停止对 Aspose.Slides.NET6.CrossPlatform 的支持。

将停止对 Graphics 和 PrinterSettings 的 API 支持

Graphics 类不支持跨平台的 .NET6 及更高版本。在 Aspose Slides 中,使用它的 API 部分将被移除: Slide

此外,与打印相关的 API 部分也将被移除:

Presentation: