现代 API
引言
从历史上看,Aspose Slides 依赖于 System.Drawing,并在公共 API 中包含以下来自该库的类:
自版本 24.4 起,此公共 API 被声明为不推荐使用。
由于 .NET6 及更高版本中对非 Windows 版本的 System.Drawing 支持被移除(重大变化),Slides 实现了一个双库版本的方法:
- Aspose.Slides.NET - 支持 Windows 的 .NET6+,Windows/Linux/MacOS 的 .NETStandard,Windows 下的 .NETFramework 2+。
- Aspose.Slides.NET6.CrossPlatform - 无依赖的 Windows/Linux/MacOS 版本。
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
- 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)
此外,与打印相关的 API 部分也将被移除: