在 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 的安裝指南,並在目標 EMF 使用的應用程式中驗證結果。非 Windows 平台的應用程式通常對顯示與編輯 Windows 中繪圖檔案的支援有限或不一致。

彩色表情符號呈現

常見問題

Aspose.Slides 是否支援渲染帶有動畫的投影片?

不支援。ISlide.getImage 方法僅渲染投影片的靜態圖像,且不會匯出動畫。

隱藏投影片可以匯出為圖像嗎?

可以。隱藏投影片可像一般投影片一樣渲染。請在處理迴圈中包含它們,如上例所示。

投影片圖像會保留陰影和其他效果嗎?

會。Aspose.Slides 會在投影片圖像中渲染陰影、透明度及其他支援的圖形效果。