在 Android 上将演示文稿幻灯片转换为图像

介绍

Aspose.Slides for Android via Java 可以将 PowerPoint 和 OpenDocument 演示文稿中的单个幻灯片渲染为 PNG、JPEG、GIF、TIFF 等图像格式。

要将幻灯片转换为图像,请按以下步骤操作:

  1. 使用 Presentation 类加载演示文稿。
  2. 选择要渲染的幻灯片。
  3. 如有必要,可使用 RenderingOptionsTiffOptions 类配置渲染。
  4. 调用 ISlide.getImage 方法。该方法返回一个 IImage 对象。
  5. 调用 IImage.save 方法,并使用 ImageFormat 值指定输出格式。

将幻灯片转换为 PNG 图像

最简单的转换使用默认渲染设置。生成的 IImage 对象可以在内存中处理或保存到文件。

下面的 Java 示例渲染第一张幻灯片并将其保存为 PNG 图像:

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage();
    try {
        image.save("Slide_0.png", ImageFormat.Png);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

将幻灯片转换为自定义尺寸的图像

使用接受 Size 值的 ISlide.getImage 重载,以精确像素尺寸渲染幻灯片。

下面的示例创建一个 1820 × 1040 的 JPEG 图像:

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
import com.aspose.slides.android.Size;

Size imageSize = new Size(1820, 1040);

Presentation presentation = new Presentation("Presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage(imageSize);
    try {
        image.save("Slide_0.jpg", ImageFormat.Jpeg);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

将带有备注和评论的幻灯片转换为图像

默认情况下,幻灯片图像不包括备注或评论。将 NotesCommentsLayoutingOptions 对象传递给 RenderingOptions.setSlidesLayoutOptions 方法,以控制备注和评论的显示位置。

下面的示例将截断的备注放在幻灯片下方,评论放在右侧:

import android.graphics.Color;
import com.aspose.slides.CommentsPositions;
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.NotesCommentsLayoutingOptions;
import com.aspose.slides.NotesPositions;
import com.aspose.slides.Presentation;
import com.aspose.slides.RenderingOptions;

float scaleX = 2f;
float scaleY = scaleX;

int commentsAreaColor = Color.rgb(250, 235, 215);

NotesCommentsLayoutingOptions layoutOptions = new NotesCommentsLayoutingOptions();
layoutOptions.setNotesPosition(NotesPositions.BottomTruncated);
layoutOptions.setCommentsPosition(CommentsPositions.Right);
layoutOptions.setCommentsAreaWidth(500);
layoutOptions.setCommentsAreaColor(commentsAreaColor);

RenderingOptions renderingOptions = new RenderingOptions();
renderingOptions.setSlidesLayoutOptions(layoutOptions);

Presentation presentation = new Presentation("Presentation_with_notes_and_comments.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage(renderingOptions, scaleX, scaleY);
    try {
        image.save("Image_with_notes_and_comments_0.gif", ImageFormat.Gif);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

使用 TIFF 选项将幻灯片转换为图像

TiffOptions 类允许您控制渲染的 TIFF 图像的大小、分辨率和其他属性。

下面的示例以 300 DPI 将第一张幻灯片渲染为 2160 × 2880 的 TIFF 图像:

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
import com.aspose.slides.TiffOptions;
import com.aspose.slides.android.Size;

Size imageSize = new Size(2160, 2880);

TiffOptions tiffOptions = new TiffOptions();
tiffOptions.setImageSize(imageSize);
tiffOptions.setDpiX(300);
tiffOptions.setDpiY(300);

Presentation presentation = new Presentation("sample.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IImage image = slide.getImage(tiffOptions);
    try {
        image.save("output.tiff", ImageFormat.Tiff);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

将所有幻灯片转换为图像

遍历幻灯片集合,将整个演示文稿转换为一系列图像。除非显式跳过,否则会包括隐藏的幻灯片。

下面的示例将每张幻灯片渲染为水平和垂直比例因子均为 2 的 JPEG 图像:

import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;

float scaleX = 2f;
float scaleY = scaleX;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    int slideCount = presentation.getSlides().size();
    for (int index = 0; index < slideCount; index++) {
        ISlide slide = presentation.getSlides().get_Item(index);
        IImage image = slide.getImage(scaleX, scaleY);
        try {
            image.save("Slide_" + index + ".jpg", ImageFormat.Jpeg);
        } finally {
            image.dispose();
        }
    }
} finally {
    presentation.dispose();
}

创建增强型图元文件(EMF)输出

增强型图元文件(EMF)在需要将基于矢量的图形与 Microsoft Office 或其他支持 Windows 图元文件的 Windows 应用程序交换时非常有用。与基于像素的图像不同,EMF 能够保留矢量绘图操作,缩放时不会出现相同的清晰度损失。然而,EMF 主要是针对支持 Windows 图元文件的应用程序的兼容性格式,而非通用的互换格式。此外,复杂的幻灯片内容(如位图图像和某些效果)可能会以栅格化元素的形式存储在矢量图元文件容器中。

导出幻灯片为 EMF

ISlide.writeAsEmf 方法将 ISlide 以 EMF 格式写入目标流。下面的示例加载演示文稿,选择第一张幻灯片,并将其写入 EMF 文件流:

import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import java.io.FileOutputStream;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    FileOutputStream emfStream = new FileOutputStream("Slide_0.emf");
    try {
        slide.writeAsEmf(emfStream);
    } finally {
        emfStream.close();
    }
} finally {
    presentation.dispose();
}

调用方拥有传递给 ISlide.writeAsEmf 的流,并负责如上所示关闭该流。

将 SVG 图像转换为 EMF 并添加到演示文稿中

使用 ISvgImage.writeAsEmf 将 SVG 内容转换为 EMF。生成的字节可以通过 IImageCollection.addImage 添加到演示文稿,并使用 IShapeCollection.addPictureFrame 放置在幻灯片上。

下面的示例从 SVG 标记创建一个 SvgImage,将其转换为内存中的 EMF,将该图元文件插入第一张幻灯片,并保存演示文稿:

import com.aspose.slides.IPPImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ISvgImage;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeType;
import com.aspose.slides.SvgImage;
import java.io.ByteArrayOutputStream;

String svgContent = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>";
ISvgImage svgImage = new SvgImage(svgContent);

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    ByteArrayOutputStream emfStream = new ByteArrayOutputStream();
    try {
        svgImage.writeAsEmf(emfStream);

        byte[] emfData = emfStream.toByteArray();
        IPPImage image = presentation.getImages().addImage(emfData);
        slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 100, image);
    } finally {
        emfStream.close();
    }

    presentation.save("Presentation_with_emf.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

ISvgImage.writeAsEmf 不会获取目标流的所有权。 ByteArrayOutputStream 将所有生成的数据存储在内存中,因此在调用 toByteArray 之前无需重置位置。流关闭后返回的字节数组仍然有效。

EMF 生成在受支持的 Android 版本和设备配置上可用,但当字体或图形依赖项不可用时,渲染可能会有所不同。请安装源内容使用的字体或配置合适的替代字体,遵循 Aspose.Slides for Android via Java 的 installation guide,并在目标 EMF 使用应用中验证结果。非 Windows 平台的应用程序通常对显示和编辑 Windows 图元文件的支持有限或不一致。

彩色表情符号渲染

常见问题

Aspose.Slides 是否支持渲染带有动画的幻灯片?

不。 ISlide.getImage 方法渲染幻灯片的静态图像,不会导出动画。

是否可以将隐藏的幻灯片导出为图像?

是。隐藏的幻灯片可以像普通幻灯片一样渲染。将它们包含在处理循环中,如上面的示例所示。

幻灯片图像是否保留阴影和其他效果?

是。Aspose.Slides 在幻灯片图像中渲染阴影、透明度以及其他受支持的图形效果。