Converter Slides de Apresentação em Imagens em Python

Introdução

Aspose.Slides for Python via Java pode renderizar slides individuais de apresentações PowerPoint e OpenDocument como PNG, JPEG, GIF, TIFF e outros formatos de imagem.

Para converter um slide em uma imagem, siga estas etapas:

  1. Carregue a apresentação usando a classe Presentation.
  2. Selecione o slide que deseja renderizar.
  3. Se necessário, configure a renderização com a classe RenderingOptions ou TiffOptions.
  4. Chame o método Slide.getImage. Ele retorna um objeto de imagem.
  5. Salve a imagem e especifique o formato de saída com um valor ImageFormat.

Converter um Slide para Imagem PNG

A conversão mais simples usa as configurações padrão de renderização. O objeto de imagem resultante pode ser processado na memória ou salvo em um arquivo.

O exemplo Python a seguir renderiza o primeiro slide e o salva como uma imagem PNG:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation

presentation = Presentation("Presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage()
    try:
        image.save("Slide_0.png", ImageFormat.Png)
    finally:
        image.dispose()
finally:
    presentation.dispose()

Converter Slides para Imagens com Tamanhos Personalizados

Use a sobrecarga Slide.getImage que aceita um valor Dimension para renderizar um slide com dimensões de pixel exatas.

O exemplo a seguir cria uma imagem JPEG de 1820 × 1040:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation
from java.awt import Dimension

image_size = Dimension(1820, 1040)

presentation = Presentation("Presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage(image_size)
    try:
        image.save("Slide_0.jpg", ImageFormat.Jpeg)
    finally:
        image.dispose()
finally:
    presentation.dispose()

Converter Slides com Notas e Comentários para Imagens

Por padrão, as imagens dos slides não incluem notas ou comentários. Passe um objeto NotesCommentsLayoutingOptions para o método RenderingOptions.setSlidesLayoutOptions para controlar onde notas e comentários aparecem.

O exemplo a seguir coloca notas truncadas abaixo do slide e comentários à sua direita:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import CommentsPositions, ImageFormat, NotesCommentsLayoutingOptions, NotesPositions, Presentation, RenderingOptions
from java.awt import Color

scale_x = 2.0
scale_y = scale_x

comments_area_color = Color(250, 235, 215)

layout_options = NotesCommentsLayoutingOptions()
layout_options.setNotesPosition(NotesPositions.BottomTruncated)
layout_options.setCommentsPosition(CommentsPositions.Right)
layout_options.setCommentsAreaWidth(500)
layout_options.setCommentsAreaColor(comments_area_color)

rendering_options = RenderingOptions()
rendering_options.setSlidesLayoutOptions(layout_options)

presentation = Presentation("Presentation_with_notes_and_comments.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage(rendering_options, scale_x, scale_y)
    try:
        image.save("Image_with_notes_and_comments_0.gif", ImageFormat.Gif)
    finally:
        image.dispose()
finally:
    presentation.dispose()

Converter Slides para Imagens Usando Opções TIFF

A classe TiffOptions permite controlar o tamanho, a resolução e outras propriedades da imagem TIFF renderizada.

O exemplo a seguir renderiza o primeiro slide como uma imagem TIFF de 2160 × 2880 a 300 DPI:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation, TiffOptions
from java.awt import Dimension

image_size = Dimension(2160, 2880)

tiff_options = TiffOptions()
tiff_options.setImageSize(image_size)
tiff_options.setDpiX(300)
tiff_options.setDpiY(300)

presentation = Presentation("sample.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    image = slide.getImage(tiff_options)
    try:
        image.save("output.tiff", ImageFormat.Tiff)
    finally:
        image.dispose()
finally:
    presentation.dispose()

Converter Todos os Slides para Imagens

Itere pela coleção de slides para converter toda a apresentação em uma série de imagens. Slides ocultos são incluídos, a menos que você os ignore explicitamente.

O exemplo a seguir renderiza cada slide como uma imagem JPEG com fatores de escala horizontal e vertical de 2:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import ImageFormat, Presentation

scale_x = 2.0
scale_y = scale_x

presentation = Presentation("Presentation.pptx")
try:
    slide_count = presentation.getSlides().size()
    for index in range(slide_count):
        slide = presentation.getSlides().get_Item(index)
        image = slide.getImage(scale_x, scale_y)
        try:
            image.save(f"Slide_{index}.jpg", ImageFormat.Jpeg)
        finally:
            image.dispose()
finally:
    presentation.dispose()

Criar Saída de Metarquivo Avançado

Enhanced Metafile (EMF) é útil quando gráficos baseados em vetor precisam ser trocados com Microsoft Office ou outros aplicativos Windows que suportam metarquivos Windows. Diferente de uma imagem baseada em pixels, um EMF pode reter operações de desenho vetorial que escalam sem perda de nitidez. Contudo, EMF é principalmente um formato de compatibilidade para aplicativos com suporte a metarquivos Windows, não um formato universal de intercâmbio. Além disso, conteúdo complexo de slides, como imagens bitmap e alguns efeitos, podem ser armazenados como elementos rasterizados dentro do contêiner vetorial do metarquivo.

Exportar um Slide para EMF

O método Slide.writeAsEmf grava um Slide em um fluxo de destino no formato EMF. O exemplo a seguir carrega uma apresentação, seleciona o primeiro slide e o grava em um fluxo de arquivo EMF:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation
from java.io import FileOutputStream

presentation = Presentation("Presentation.pptx")
try:
    slide = presentation.getSlides().get_Item(0)

    emf_stream = FileOutputStream("Slide_0.emf")
    try:
        slide.writeAsEmf(emf_stream)
    finally:
        emf_stream.close()
finally:
    presentation.dispose()

O chamador é o proprietário do fluxo passado para Slide.writeAsEmf e é responsável por fechá‑lo, conforme demonstrado acima.

Converter uma Imagem SVG para EMF e Adicioná‑la a uma Apresentação

Use SvgImage.writeAsEmf para converter conteúdo SVG em EMF. Os bytes resultantes podem ser adicionados à apresentação através de ImageCollection.addImage e colocados em um slide com ShapeCollection.addPictureFrame.

O exemplo a seguir cria um SvgImage a partir de marcação SVG, converte‑o para um EMF em memória, insere o metarquivo no primeiro slide e salva a apresentação:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, ShapeType, SvgImage
from java.io import ByteArrayOutputStream

svg_content = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"200\" height=\"100\"><rect width=\"200\" height=\"100\" fill=\"#4472C4\"/></svg>"
svg_image = SvgImage(svg_content)

presentation = Presentation()
try:
    slide = presentation.getSlides().get_Item(0)

    emf_stream = ByteArrayOutputStream()
    try:
        svg_image.writeAsEmf(emf_stream)

        emf_data = emf_stream.toByteArray()
        image = presentation.getImages().addImage(emf_data)
        slide.getShapes().addPictureFrame(ShapeType.Rectangle, 20, 20, 200, 100, image)
    finally:
        emf_stream.close()

    presentation.save("Presentation_with_emf.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

SvgImage.writeAsEmf não assume a propriedade do fluxo de destino. Um ByteArrayOutputStream armazena todos os dados gerados na memória, portanto não é necessário redefinir a posição antes de chamar ByteArrayOutputStream.toByteArray. O array de bytes retornado permanece válido após o fechamento do fluxo.

A geração de EMF está disponível nos sistemas operacionais suportados pela configuração selecionada de Aspose.Slides for Python via Java e JDK, porém a renderização pode variar entre plataformas quando fontes ou dependências gráficas não estão disponíveis. Instale as fontes usadas pelo conteúdo de origem ou configure substituições adequadas, siga os requisitos de plataforma para Aspose.Slides for Python via Java e valide o resultado no aplicativo que consumirá o EMF. Aplicativos Linux e macOS costumam ter suporte limitado ou inconsistente para exibir e editar metarquivos Windows.

Renderização de Emoji Colorido

Perguntas Frequentes

O Aspose.Slides oferece suporte à renderização de slides com animações?

Não. O método Slide.getImage renderiza uma imagem estática do slide e não exporta animações.

Slides ocultos podem ser exportados como imagens?

Sim. Slides ocultos podem ser renderizados como slides normais. Inclua‑os no loop de processamento, conforme o exemplo acima.

Sombras e outros efeitos são preservados nas imagens dos slides?

Sim. Aspose.Slides renderiza sombras, transparência e outros efeitos gráficos suportados nas imagens dos slides.