在 Java 中將簡報投影片轉換為影像

簡介

Aspose.Slides for 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();
}

使用自訂尺寸將投影片轉換為影像

使用接受 Dimension 參數的 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 java.awt.Dimension;

Dimension imageSize = new Dimension(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 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;
import java.awt.Color;

float scaleX = 2f;
float scaleY = scaleX;

Color commentsAreaColor = new Color(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 java.awt.Dimension;

Dimension imageSize = new Dimension(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 產生功能會依所選的 Aspose.Slides for Java 及 JDK 設定所支援的作業系統而提供,但若缺少字型或圖形相依性,跨平台的渲染結果可能會有所差異。請安裝來源內容所使用的字型或配置適當的替代方案,遵循 Aspose.Slides for Java 的平台需求,並在目標 EMF 使用應用程式中驗證結果。Linux 與 macOS 應用程式通常對 Windows 中介檔的顯示與編輯支援有限或不一致。

彩色表情符號渲染

常見問題

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

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

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

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

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

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