Konwertowanie slajdów prezentacji na obrazy w Pythonie
Wprowadzenie
Aspose.Slides for Python via Java może renderować pojedyncze slajdy z prezentacji PowerPoint i OpenDocument jako PNG, JPEG, GIF, TIFF i inne formaty graficzne.
Aby przekonwertować slajd na obraz, wykonaj następujące kroki:
- Wczytaj prezentację przy pomocy klasy Presentation .
- Wybierz slajd, który chcesz zrenderować.
- W razie potrzeby skonfiguruj renderowanie przy pomocy klasy RenderingOptions lub TiffOptions .
- Wywołaj metodę Slide.getImage . Zwraca ona obiekt obrazu.
- Zapisz obraz i określ format wyjściowy za pomocą wartości ImageFormat .
Konwertowanie slajdu na obraz PNG
Najprostsza konwersja używa domyślnych ustawień renderowania. Uzyskany obiekt obrazu może być przetwarzany w pamięci lub zapisany do pliku.
Poniższy przykład w Pythonie renderuje pierwszy slajd i zapisuje go jako obraz 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()
Konwertowanie slajdów na obrazy o niestandardowych rozmiarach
Użyj przeciążenia Slide.getImage , które przyjmuje wartość Dimension , aby renderować slajd o dokładnych wymiarach w pikselach.
Poniższy przykład tworzy obraz JPEG o rozmiarach 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()
Konwertowanie slajdów z notatkami i komentarzami na obrazy
Domyślnie obrazy slajdów nie zawierają notatek ani komentarzy. Przekaż obiekt NotesCommentsLayoutingOptions do metody RenderingOptions.setSlidesLayoutOptions , aby kontrolować, gdzie pojawiają się notatki i komentarze.
Poniższy przykład umieszcza obcięte notatki pod slajdem, a komentarze po jego prawej stronie:
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()
Warning
Podczas konwersji slajdu na obraz nie przekazuj BottomFull do metody NotesCommentsLayoutingOptions.setNotesPosition . Notatki mogą zawierać więcej tekstu niż stały rozmiar obrazu może pomieścić. Użyj zamiast tego BottomTruncated .Konwertowanie slajdów na obrazy przy użyciu opcji TIFF
Klasa TiffOptions umożliwia kontrolowanie rozmiaru, rozdzielczości i innych właściwości renderowanego obrazu TIFF.
Poniższy przykład renderuje pierwszy slajd jako obraz TIFF o wymiarach 2160 × 2880 przy 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()
Warning
Obsługa TIFF nie jest gwarantowana w wersjach Javy starszych niż JDK 9.Konwertowanie wszystkich slajdów na obrazy
Iteruj po kolekcji slajdów, aby przekonwertować całą prezentację na serię obrazów. Ukryte slajdy są uwzględniane, chyba że jawnie je pominiesz.
Poniższy przykład renderuje każdy slajd jako obraz JPEG z poziomym i pionowym współczynnikiem skali równym 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()
Tworzenie wyjścia w formacie Enhanced Metafile
Enhanced Metafile (EMF) jest przydatny, gdy grafika wektorowa musi być wymieniana z Microsoft Office lub innymi aplikacjami Windows obsługującymi pliki metafile Windows. W przeciwieństwie do obrazu rastrowego, EMF może zachować operacje rysowania wektorowego, które skalują się bez utraty ostrości. Jednak EMF jest przede wszystkim formatem kompatybilności dla aplikacji obsługujących metafile Windows, a nie uniwersalnym formatem wymiany. Dodatkowo, złożona zawartość slajdu, taka jak obrazy bitmapowe i niektóre efekty, może być przechowywana jako elementy rastrowe wewnątrz kontenera metafile wektorowego.
Eksport slajdu do EMF
Metoda Slide.writeAsEmf zapisuje Slide do docelowego strumienia w formacie EMF. Poniższy przykład ładuje prezentację, wybiera pierwszy slajd i zapisuje go do strumienia pliku 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()
Wywołujący posiada strumień przekazany do Slide.writeAsEmf i jest odpowiedzialny za jego zamknięcie, jak pokazano powyżej.
Konwersja obrazu SVG do EMF i dodanie go do prezentacji
Użyj SvgImage.writeAsEmf , aby przekonwertować zawartość SVG na EMF. Uzyskane bajty można dodać do prezentacji za pomocą ImageCollection.addImage i umieścić na slajdzie przy pomocy ShapeCollection.addPictureFrame .
Poniższy przykład tworzy SvgImage z kodu SVG, konwertuje go na EMF w pamięci, wstawia metafile na pierwszy slajd i zapisuje prezentację:
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 nie przejmuje własności docelowego strumienia. ByteArrayOutputStream przechowuje wszystkie wygenerowane dane w pamięci, więc nie jest wymagane resetowanie pozycji przed wywołaniem ByteArrayOutputStream.toByteArray . Zwrócona tablica bajtów pozostaje ważna po zamknięciu strumienia.
Generowanie EMF jest dostępne na systemach operacyjnych wspieranych przez wybraną wersję Aspose.Slides for Python via Java i konfigurację JDK, ale renderowanie może się różnić między platformami, gdy czcionki lub zależności graficzne są niedostępne. Zainstaluj czcionki używane w zawartości źródłowej lub skonfiguruj odpowiednie zamienniki, postępuj zgodnie z platform requirements dla Aspose.Slides for Python via Java i zweryfikuj wynik w docelowej aplikacji konsumującej EMF. Aplikacje na Linuksie i macOS często mają ograniczone lub niejednolite wsparcie dla wyświetlania i edycji metafile Windows.
Renderowanie kolorowych emoji
Note
Aby poprawnie renderować kolorowe emoji podczas konwersji slajdów prezentacji na obrazy, czcionki emoji użyte w prezentacji muszą być zainstalowane i dostępne w systemie wykonującym konwersję. Na przykład, jeśli prezentacja używa Segoe UI Emoji i ta czcionka jest brakująca, emoji mogą pojawiać się w monochromatycznej formie w obrazach wyjściowych.FAQ
Czy Aspose.Slides obsługuje renderowanie slajdów z animacjami?
Nie. Metoda Slide.getImage renderuje statyczny obraz slajdu i nie eksportuje animacji.
Czy ukryte slajdy mogą być eksportowane jako obrazy?
Tak. Ukryte slajdy mogą być renderowane jak zwykłe slajdy. Uwzględnij je w pętli przetwarzania, jak pokazano w powyższym przykładzie.
Czy cienie i inne efekty są zachowane w obrazach slajdów?
Tak. Aspose.Slides renderuje cienie, przezroczystość i inne obsługiwane efekty graficzne w obrazach slajdów.