Jak zapisywać prezentacje w Javie

Jak zapisywać prezentacje w Javie

Aspose.Slides FOSS for Java zapisuje prezentacje wyłącznie w formacie .pptx przy użyciu prs.save(path, SaveFormat.PPTX). Ten przewodnik obejmuje prawidłowy wzorzec zapisu, zapisywanie do innej ścieżki oraz typowe błędy związane z zapisem.

Przewodnik krok po kroku

Krok 1: Dodaj zależność Maven

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Krok 2: Otwórz lub utwórz prezentację

Zawsze używaj try-with-resources. Wywołanie zapisu musi odbywać się wewnątrz bloku try.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

// Create new
try (Presentation prs = new Presentation()) {
    prs.save("new.pptx", SaveFormat.PPTX);
}

// Open existing
try (Presentation prs = new Presentation("input.pptx")) {
    prs.save("output.pptx", SaveFormat.PPTX);
}

Krok 3: Zapisz po wszystkich modyfikacjach

Umieść wywołanie save() jako ostatnie polecenie wewnątrz bloku try, po zakończeniu wszystkich modyfikacji.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    IAutoShape shape = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 300, 100
    );
    shape.addTextFrame("Hello, World!");
    prs.save("output.pptx", SaveFormat.PPTX);
}

Krok 4: Zapisz w innej ścieżce

Podaj inną ścieżkę wyjściową, aby utworzyć nowy plik bez modyfikowania oryginału:

try (Presentation prs = new Presentation("template.pptx")) {
    // modify ...
    prs.save("customized.pptx", SaveFormat.PPTX);
}

Plik template.pptx nie jest modyfikowany; customized.pptx jest tworzony (lub nadpisywany, jeśli już istnieje).


Krok 5: Zweryfikuj wynik

Po wyjściu z bloku try plik jest kompletny i zamknięty. Sprawdź, czy istnieje:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Path output = Paths.get("output.pptx");
System.out.println("Saved: " + Files.exists(output)
    + ", size: " + Files.size(output) + " bytes");

Obsługiwany format zapisu

FormatWartość wyliczeniaObsługiwane
PPTX (Office Open XML)SaveFormat.PPTXTak
PDFN/ANie
HTMLN/ANie
SVGN/ANie
PNG / JPEGN/ANie
ODP (OpenDocument)N/ANie

Tylko PPTX jest w pełni obsługiwany. Przekazanie jakiejkolwiek innej wartości SaveFormat do prs.save(path, format) cicho zapisuje jako PPTX — nie zostaje rzucony żaden wyjątek i argument formatu jest ignorowany. UnsupportedOperationException jest rzucany tylko przez prs.save(ISaveOptions options), nie przez przeciążenia oparte na formacie.


Typowe problemy i rozwiązania

java.io.IOException: Permission denied

Plik wyjściowy jest otwarty w innym programie (np. PowerPoint ma otwarty plik). Zamknij plik w innych aplikacjach przed zapisaniem.

Plik jest tworzony, ale wydaje się pusty lub uszkodzony

Upewnij się, że prs.save() jest wywoływany wewnątrz bloku try, a nie po nim. Po zakończeniu bloku try‑with‑resources obiekt Presentation zostaje zwolniony i kolejne wywołania zakończą się niepowodzeniem.

UnsupportedOperationException przy zapisywaniu

To występuje podczas używania prs.save(ISaveOptions options) — przeciążenie oparte na ISaveOptions nie jest zaimplementowane. Uwaga: przekazanie nie‑PPTX SaveFormat do prs.save(path, format) nie powoduje wyrzucenia tego wyjątku; zapisuje się cicho jako PPTX.


Najczęściej zadawane pytania

Czy mogę zapisać do tego samego pliku, który otworzyłem?

Tak. Zapisywanie w tej samej ścieżce nadpisuje oryginalny plik:

try (Presentation prs = new Presentation("deck.pptx")) {
    // modify ...
    prs.save("deck.pptx", SaveFormat.PPTX);  // overwrites original
}

Czy mogę zapisać do OutputStream?

Tak. Metoda save() przyjmuje OutputStream:

import java.io.FileOutputStream;

try (Presentation prs = new Presentation();
     FileOutputStream fos = new FileOutputStream("output.pptx")) {
    prs.save(fos, SaveFormat.PPTX);
}

Czy zapisywanie zachowuje treść, której nie zmodyfikowałem?

Tak. Nieznane części XML z oryginalnego pliku są zachowywane dosłownie. Biblioteka serializuje tylko te części modelu dokumentu, które rozumie, i przepuszcza wszelkie XML, których nie rozpoznaje.


Zobacz także

 Polski