Zapisz prezentacje w PHP
Przegląd
Po utworzeniu prezentacji lub otwarciu istniejącej, użyj metody Presentation::save, aby zapisać wynik. Aspose.Slides for PHP via Java może zapisać prezentację do pliku lub strumienia w formatach PowerPoint, OpenDocument, PDF i innych. Poniższe sekcje opisują standardowe operacje zapisu oraz dostępne opcje dla wyjścia PPTX.
Zapisywanie prezentacji do plików
Aby zapisać prezentację do pliku, przekaż ścieżkę wyjściową oraz wartość SaveFormat do metody Presentation::save. Wartość formatu określa typ pliku, który tworzy Aspose.Slides.
Poniższy przykład tworzy prezentację i zapisuje ją jako plik PPTX:
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
// Dodaj lub zmodyfikuj zawartość prezentacji tutaj.
$presentation->save("Output.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Zapisywanie prezentacji w ich oryginalnym formacie
Przykłady wykrywania formatu pliku i strumienia, zachowanie nowo utworzonych prezentacji oraz różnica między formatem źródłowym a wyjściowym opisano w sekcji Determine the Original Presentation Format.
W aplikacji przetwarzającej partie, format wejściowy może nie być znany z góry. Po załadowaniu pliku odczytaj jego oryginalny format z metody Presentation::getSourceFormat. Przekaż uzyskaną wartość SourceFormat do SlideUtil::toSaveFormat, aby otrzymać odpowiadającą wartość SaveFormat, a następnie użyj Presentation::save, aby zapisać zmodyfikowaną prezentację.
Poniższy kompletny przykład przetwarza każdy plik w katalogu wejściowym, aktualizuje jego tytuł i zapisuje go do katalogu wyjściowego w formacie, z którego został wczytany:
use aspose\slides\Presentation;
use aspose\slides\SlideUtil;
$inputDirectory = __DIR__ . DIRECTORY_SEPARATOR . "Input";
$outputDirectory = __DIR__ . DIRECTORY_SEPARATOR . "Output";
if (!is_dir($outputDirectory) && !mkdir($outputDirectory, 0777, true)) {
echo("Cannot create the output directory." . PHP_EOL);
}
$inputFiles = is_dir($inputDirectory) ? scandir($inputDirectory) : false;
if ($inputFiles !== false && is_dir($outputDirectory)) {
foreach ($inputFiles as $fileName) {
$inputPath = $inputDirectory . DIRECTORY_SEPARATOR . $fileName;
if (!is_file($inputPath)) {
continue;
}
$presentation = null;
$presentationLoaded = false;
try {
$presentation = new Presentation($inputPath);
$presentationLoaded = true;
$saveFormat = SlideUtil::toSaveFormat($presentation->getSourceFormat());
$presentation->getDocumentProperties()->setTitle("Processed by the batch application");
$outputPath = $outputDirectory . DIRECTORY_SEPARATOR . $fileName;
$presentation->save($outputPath, $saveFormat);
} catch (\Throwable $exception) {
echo("Cannot process '" . $inputPath . "': " . $exception->getMessage() . PHP_EOL);
} finally {
if ($presentationLoaded) {
$presentation->dispose();
}
}
}
}
SlideUtil::toSaveFormat mapuje PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP oraz PowerPoint XML na odpowiadające formaty zapisu prezentacji. Mapuje jedynie formaty źródłowe prezentacji; nie służy do wyboru formatów eksportu, takich jak PDF, HTML, TIFF czy obrazy. Przekazanie nieobsługiwanej lub nieprawidłowej wartości SourceFormat powoduje wyrzucenie IllegalArgumentException.
Starsze pliki PPT, PPS i POT używają tego samego binarnego kontenera. Gdy taka prezentacja zostanie załadowana ze strumienia bez rozszerzenia pliku, plik PPS lub POT może zostać zidentyfikowany jako PPT. Jeśli wymagana jest zachowanie tych starszych podtypów, zachowaj oryginalną nazwę pliku lub metadane formatu osobno i użyj ich przy wyborze nazwy i formatu pliku wyjściowego.
Zapisywanie prezentacji do strumieni
Aby zapisać prezentację bez określania ostatecznej ścieżki pliku, przekaż zapisywalny strumień oraz wartość SaveFormat do metody Presentation::save. Takie podejście jest przydatne, gdy wynik musi zostać zwrócony z usługi sieciowej, zapisany w bazie danych lub przetworzony w pamięci.
Poniższy przykład zapisuje nową prezentację do strumienia pliku:
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation();
try {
$outputStream = new Java("java.io.FileOutputStream", "Output.pptx");
try {
$presentation->save($outputStream, SaveFormat::Pptx);
} finally {
$outputStream->close();
}
} finally {
$presentation->dispose();
}
Zapisywanie prezentacji z określonym typem widoku
Możesz określić widok, w którym PowerPoint otwiera zapisany plik początkowo. Użyj metody ViewProperties::setLastView z wartością ViewType przed zapisem.
Poniższy przykład konfiguruje widok Slide Master jako widok początkowy:
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ViewType;
$presentation = new Presentation();
try {
$presentation->getViewProperties()->setLastView(ViewType::SlideMasterView);
$presentation->save("SlideMasterView.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
Zapisywanie prezentacji w ściśle określonym formacie Office Open XML
Aby utworzyć plik PPTX zgodny z profilem Strict Office Open XML, utwórz instancję PptxOptions i użyj jej metody PptxOptions::setConformance z wartością Conformance::Iso29500_2008_Strict. Następnie przekaż opcje do metody Presentation::save.
use aspose\slides\Conformance;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$options = new PptxOptions();
$options->setConformance(Conformance::Iso29500_2008_Strict);
$presentation = new Presentation();
try {
$presentation->save("StrictOfficeOpenXml.pptx", SaveFormat::Pptx, $options);
} finally {
$presentation->dispose();
}
Zapisywanie prezentacji w formacie Office Open XML w trybie Zip64
Standardowe archiwum ZIP ogranicza rozmiar skompresowanych i nieskompresowanych wpisów, łączny rozmiar archiwum oraz liczbę wpisów. Ponieważ plik PPTX jest archiwum ZIP, bardzo duża prezentacja może przekroczyć te limity. Rozszerzenia ZIP64 podnoszą obowiązujące limity rozmiaru i liczby wpisów.
Użyj metody PptxOptions::setZip64Mode, aby kontrolować, czy Aspose.Slides zapisuje rozszerzenia ZIP64:
- IfNecessary używa ZIP64 tylko wtedy, gdy prezentacja przekracza standardowe limity ZIP. To domyślny tryb.
- Never wyłącza rozszerzenia ZIP64.
- Always zawsze zapisuje rozszerzenia ZIP64.
Poniższy przykład zawsze włącza rozszerzenia ZIP64 dla prezentacji wyjściowej:
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\Zip64Mode;
$presentation = new Presentation("Sample.pptx");
try {
$options = new PptxOptions();
$options->setZip64Mode(Zip64Mode::Always);
$presentation->save("OutputZip64.pptx", SaveFormat::Pptx, $options);
} finally {
$presentation->dispose();
}
Warning
Jeśli użyto Zip64Mode::Never i prezentacja nie mieści się w standardowych limitach ZIP, operacja zapisu zgłasza PptxException.Zapisywanie prezentacji w formacie Office Open XML z poziomami kompresji
Dla wyjścia PPTX możesz zrównoważyć szybkość zapisu z rozmiarem pliku, używając metody PptxOptions::setCompressionLevel. Klasa CompressionLevel udostępnia następujące wartości:
- None przechowuje dane bez kompresji.
- Level1 zapewnia najszybszą kompresję i największy skompresowany wynik.
- Level2 do Level5 stopniowo preferują mniejszy wynik kosztem szybkości zapisu.
- Level6 równoważy szybkość zapisu i rozmiar pliku. To domyślny poziom.
- Level7 i Level8 jeszcze bardziej faworyzują mniejszy wynik kosztem szybkości zapisu.
- Level9 zapewnia najsilniejszą kompresję i wymaga najwięcej czasu przetwarzania.
Poniższy przykład zapisuje prezentację bez kompresji:
use aspose\slides\CompressionLevel;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("Sample.pptx");
try {
$options = new PptxOptions();
$options->setCompressionLevel(CompressionLevel::None);
$presentation->save("OutputNoCompression.pptx", SaveFormat::Pptx, $options);
} finally {
$presentation->dispose();
}
Poniższy przykład używa maksymalnego poziomu kompresji:
use aspose\slides\CompressionLevel;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("Sample.pptx");
try {
$options = new PptxOptions();
$options->setCompressionLevel(CompressionLevel::Level9);
$presentation->save("OutputMaximumCompression.pptx", SaveFormat::Pptx, $options);
} finally {
$presentation->dispose();
}
Zapisywanie prezentacji bez odświeżania miniaturki
Gdy prezentacja jest zapisywana jako PPTX, metoda PptxOptions::setRefreshThumbnail kontroluje jej miniaturkę dokumentu:
trueodtwarza miniaturkę podczas operacji zapisu. To wartość domyślna.falsezachowuje istniejącą miniaturkę. Jeśli prezentacja nie ma miniaturki, Aspose.Slides jej nie generuje.
Poniższy przykład zapisuje prezentację bez odświeżania miniaturki:
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
$presentation = new Presentation("Sample.pptx");
try {
$options = new PptxOptions();
$options->setRefreshThumbnail(false);
$presentation->save("Output.pptx", SaveFormat::Pptx, $options);
} finally {
$presentation->dispose();
}
Note
Wyłączenie odświeżania miniaturki może skrócić czas zapisu pliku PPTX.Aktualizacje postępu zapisu w procentach
Aby monitorować operację zapisu, dostarcz proxy w Javie implementujące interfejs IProgressCallback i przekaż proxy do metody SaveOptions::setProgressCallback. Aspose.Slides wywoła metodę IProgressCallback::reporting z wartościami postępu podczas eksportu.
Poniższy przykład raportuje postęp eksportu PDF do konsoli:
use aspose\slides\PdfOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
class ExportProgressHandler {
function reporting($progressValue) {
$progress = java("java.lang.Double")->valueOf($progressValue)->intValue();
echo($progress . "% of the file has been converted." . PHP_EOL);
}
}
$progressHandler = java_closure(new ExportProgressHandler(), null, java("com.aspose.slides.IProgressCallback"));
$options = new PdfOptions();
$options->setProgressCallback($progressHandler);
$presentation = new Presentation("Sample.pptx");
try {
$presentation->save("Output.pdf", SaveFormat::Pdf, $options);
} finally {
$presentation->dispose();
}
Note
Aspose udostępnia bezpłatny PowerPoint Splitter zbudowany w oparciu o API Aspose.Slides. Umożliwia on zapis wybranych slajdów z prezentacji jako oddzielne pliki PPT lub PPTX.FAQ
Czy Aspose.Slides obsługuje zapis przyrostowy lub „fast save”?
Nie. Każda operacja zapisu tworzy pełny plik wyjściowy zamiast aktualizować tylko zmienione części.
Czy wiele wątków może zapisywać tę samą instancję Presentation?
Nie. Instancja Presentation nie jest thread‑safe (/slides/pl/php-java/multithreading/). Dostęp i zapis każdej instancji powinny odbywać się z jednego wątku naraz.
Co się dzieje z hiperłączami i zewnętrznie powiązanymi plikami po zapisaniu prezentacji?
Hyperlinks pozostają w prezentacji. Aspose.Slides nie kopiuje plików powiązanych zewnętrznie, więc zapisana prezentacja musi nadal mieć dostęp do ich lokalizacji.
Czy mogę zapisać metadane dokumentu, takie jak autor, tytuł, firma i data utworzenia?
Tak. Ustaw odpowiednie document properties przed zapisem, a Aspose.Slides zapisze je w pliku wyjściowym.