Konwertowanie slajdów prezentacji na obrazy w PHP
Wprowadzenie
Aspose.Slides for PHP via 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ę przy użyciu klasy Presentation.
- Wybierz slajd, który chcesz wyrenderować.
- W razie potrzeby skonfiguruj renderowanie przy użyciu klasy RenderingOptions lub TiffOptions.
- Wywołaj metodę Slide::getImage. Zwraca ona obiekt IImage.
- Wywołaj metodę IImage::save i określ format wyjściowy przy użyciu 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 PHP renderuje pierwszy slajd i zapisuje go jako obraz PNG:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
$presentation = new 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 z niestandardowymi rozmiarami
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 wymiarach 1820 × 1040:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
$imageSize = new Java("java.awt.Dimension", 1820, 1040);
$presentation = new Presentation("Presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$image = $slide->getImage($imageSize);
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 notatki i komentarze mają się pojawiać.
Poniższy przykład umieszcza skrócone notatki pod slajdem oraz komentarze po jego prawej stronie:
use aspose\slides\CommentsPositions;
use aspose\slides\ImageFormat;
use aspose\slides\NotesCommentsLayoutingOptions;
use aspose\slides\NotesPositions;
use aspose\slides\Presentation;
use aspose\slides\RenderingOptions;
$scaleX = 2;
$scaleY = $scaleX;
$commentsAreaColor = new Java("java.awt.Color", 250, 235, 215);
$layoutOptions = new NotesCommentsLayoutingOptions();
$layoutOptions->setNotesPosition(NotesPositions::BottomTruncated);
$layoutOptions->setCommentsPosition(CommentsPositions::Right);
$layoutOptions->setCommentsAreaWidth(500);
$layoutOptions->setCommentsAreaColor($commentsAreaColor);
$renderingOptions = new RenderingOptions();
$renderingOptions->setSlidesLayoutOptions($layoutOptions);
$presentation = new Presentation("Presentation_with_notes_and_comments.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$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ż stały rozmiar obrazu może pomieścić. Zamiast tego użyj 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:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
use aspose\slides\TiffOptions;
$imageSize = new Java("java.awt.Dimension", 2160, 2880);
$tiffOptions = new TiffOptions();
$tiffOptions->setImageSize($imageSize);
$tiffOptions->setDpiX(300);
$tiffOptions->setDpiY(300);
$presentation = new Presentation("sample.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$image = $slide->getImage($tiffOptions);
try {
$image->save("output.tiff", ImageFormat::Tiff);
} finally {
$image->dispose();
}
} finally {
$presentation->dispose();
}
Warning
Obsługa TIFF nie jest gwarantowana w wersjach Javy wcześniejszych 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 skalowania równym 2:
use aspose\slides\ImageFormat;
use aspose\slides\Presentation;
$scaleX = 2;
$scaleY = $scaleX;
$presentation = new Presentation("Presentation.pptx");
try {
$slideCount = java_values($presentation->getSlides()->size());
for ($index = 0; $index < $slideCount; $index++) {
$slide = $presentation->getSlides()->get_Item($index);
$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 wektora, które skalują się bez utraty ostrości. Jednak EMF jest przede wszystkim formatem kompatybilności dla aplikacji obsługujących pliki 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 rasteryzowane wewnątrz kontenera wektorowego metafile.
Eksportowanie slajdu do EMF
Metoda Slide::writeAsEmf zapisuje slajd do docelowego strumienia w formacie EMF. Poniższy przykład ładuje prezentację, wybiera pierwszy slajd i zapisuje go do strumienia pliku EMF:
use aspose\slides\Presentation;
$presentation = new Presentation("Presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$emfStream = new Java("java.io.FileOutputStream", "Slide_0.emf");
try {
$slide->writeAsEmf($emfStream);
} finally {
$emfStream->close();
}
} finally {
$presentation->dispose();
}
Wywołujący jest właścicielem strumienia przekazanego do Slide::writeAsEmf i jest odpowiedzialny za jego zamknięcie, jak pokazano powyżej.
Konwertowanie 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 do EMF w pamięci, wstawia metafile na pierwszym slajdzie i zapisuje prezentację:
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
use aspose\slides\SvgImage;
$svgContent = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="100"><rect width="200" height="100" fill="#4472C4"/></svg>';
$svgImage = new SvgImage($svgContent);
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$emfStream = new Java("java.io.ByteArrayOutputStream");
try {
$svgImage->writeAsEmf($emfStream);
$emfData = $emfStream->toByteArray();
$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();
}
SvgImage::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 PHP via Java oraz JDK, ale renderowanie może różnić się w zależności od platformy, gdy czcionki lub zależności graficzne nie są dostępne. Zainstaluj czcionki użyte w oryginalnej treści lub skonfiguruj odpowiednie substytuty, postępuj zgodnie z wymaganiami platformy dla Aspose.Slides for PHP via Java i zweryfikuj wynik w docelowej aplikacji odczytującej EMF. Aplikacje Linux i macOS często mają ograniczone lub niejednolite wsparcie dla wyświetlania i edytowania metafile Windows.
Renderowanie kolorowych emoji
Note
Aby prawidłowo 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 nieobecna, 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, tak 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.