Konwertowanie slajdów prezentacji na obrazy w Javie
Wprowadzenie
Aspose.Slides for Java może renderować pojedyncze slajdy z prezentacji PowerPoint i OpenDocument jako PNG, JPEG, GIF, TIFF i inne formaty obrazów.
Aby przekonwertować slajd na obraz, wykonaj następujące kroki:
- Załaduj prezentację za pomocą klasy Presentation.
- Wybierz slajd, który chcesz wyrenderować.
- W razie potrzeby skonfiguruj renderowanie przy pomocy klasy RenderingOptions lub TiffOptions.
- Wywołaj metodę ISlide.getImage. Zwraca ona obiekt IImage.
- Wywołaj metodę IImage.save 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 IImage może być przetwarzany w pamięci lub zapisany do pliku.
Poniższy przykład w języku Java renderuje pierwszy slajd i zapisuje go jako obraz 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();
}
Konwersja slajdów do obrazów o niestandardowych rozmiarach
Użyj przeciążenia ISlide.getImage, które przyjmuje wartość Dimension, aby renderować slajd o dokładnych wymiarach w pikselach.
Poniższy przykład tworzy obraz JPEG o wymiarach 1820 × 1040:
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();
}
Konwersja slajdów z notatkami i komentarzami do obrazów
Domyślnie obrazy slajdów nie zawierają notatek ani komentarzy. Przekaż obiekt NotesCommentsLayoutingOptions do metody RenderingOptions.setSlidesLayoutOptions, aby kontrolować, gdzie mają się pojawiać notatki i komentarze.
Poniższy przykład umieszcza skrócone notatki pod slajdem oraz komentarze po jego prawej stronie:
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();
}
Warning
Podczas konwersji slajdu na obraz nie przekazuj BottomFull do metody NotesCommentsLayoutingOptions.setNotesPosition. Notatki mogą zawierać więcej tekstu niż pozwala na to stały rozmiar obrazu. Użyj zamiast tego BottomTruncated.Konwersja slajdów do obrazów przy użyciu opcji TIFF
Klasa TiffOptions pozwala kontrolować rozmiar, rozdzielczość i inne 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 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();
}
Warning
Obsługa formatu TIFF nie jest gwarantowana w wersjach Java wcześniejszych niż JDK 9.Konwersja wszystkich slajdów do obrazów
Iteruj przez kolekcję slajdów, aby przekonwertować całą prezentację na serię obrazów. Ukryte slajdy są uwzględniane, o ile nie zostaną wyraźnie pominięte.
Poniższy przykład renderuje każdy slajd jako obraz JPEG z poziomymi i pionowymi współczynnikami skalowania równymi 2:
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();
}
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 rysunkowe wektorowe, 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ść slajdów, 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 ISlide.writeAsEmf zapisuje ISlide do docelowego strumienia w formacie EMF. Poniższy przykład ładuje prezentację, wybiera pierwszy slajd i zapisuje go do strumienia pliku 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();
}
Wywołujący jest właścicielem strumienia przekazanego do ISlide.writeAsEmf i jest odpowiedzialny za jego zamknięcie, tak jak pokazano powyżej.
Konwersja obrazu SVG do EMF i dodanie go do prezentacji
Użyj ISvgImage.writeAsEmf, aby przekonwertować zawartość SVG na EMF. Uzyskane bajty mogą zostać dodane do prezentacji za pomocą IImageCollection.addImage i umieszczone na slajdzie przy pomocy IShapeCollection.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 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 nie przejmuje własności docelowego strumienia. ByteArrayOutputStream przechowuje wszystkie wygenerowane dane w pamięci, więc przed wywołaniem toByteArray nie jest wymagane resetowanie pozycji. Zwrócona tablica bajtów pozostaje ważna po zamknięciu strumienia.
Generowanie EMF jest dostępne na systemach operacyjnych obsługiwanych przez wybraną konfigurację Aspose.Slides for Java i JDK, jednak renderowanie może się różnić w zależności od platformy, gdy czcionki lub zależności graficzne są niedostępne. Zainstaluj czcionki używane w źródłowej zawartości lub skonfiguruj odpowiednie zamienniki, postępuj zgodnie z wymaganiami platformy dla Aspose.Slides for Java i zweryfikuj wynik w docelowej aplikacji obsługującej EMF. Aplikacje na Linux i macOS często mają ograniczoną lub niespójną obsługę wyświetlania i edycji metafile Windows.
Renderowanie kolorowych emoji
Note
Aby prawidłowo renderować kolorowe emoji podczas konwertowania 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 nieobecna, emoji mogą pojawiać się w odcieniach szarości w obrazach wyjściowych.FAQ
Czy Aspose.Slides obsługuje renderowanie slajdów z animacjami?
Nie. Metoda ISlide.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ą zachowywane w obrazach slajdów?
Tak. Aspose.Slides renderuje cienie, przezroczystość i inne obsługiwane efekty graficzne w obrazach slajdów.