# Java PowerPoint API | Aspose.Slides for Java

> Aspose.Slides for Java is a PowerPoint API for creating, editing, converting, and processing PPT, PPTX, and other presentation formats in Java.

Source: https://products.aspose.com/slides/java/
Updated: 2026-08-28



| Label | Install |
|---|---|
| CLI | mvn dependency:get -DremoteRepositories=https://releases.aspose.com/java/repo/ -Dartifact=com.aspose:aspose-slides:26.8:jar:jdk16 |
| Repository | https://releases.aspose.com/java/repo/ |
| Coordinate | com.aspose:aspose-slides:26.8:jdk16 |

| Figure | Caption |
|---|---|
| 189 / 82 | Shape types and chart types, each a real object that PowerPoint still recognises and lets a person edit. |
| 13 -> 12 | Presentation formats read and written, including the pre-2007 binary .ppt container and OpenDocument .odp, plus 9 further export targets. |
| 1 | JAR, resolved from the Aspose repository rather than Maven Central. Its POM declares no dependencies, so nothing is dragged in behind it and nothing native sits beside it. |
| Java 6+ | The one real prerequisite. This is pure Java, so no Office install, no COM automation and no X display enter the picture, but it runs inside a JVM and it wants fontconfig and installed fonts wherever it renders. |

## Five things people actually write

| Task | Hint | Flow | Note | Docs |
|---|---|---|---|---|
| Convert | Read a deck once and write it back out in whichever formats your readers actually open. | PPTX -> PDF / HTML / TIFF | One Presentation instance, saved three times. Call dispose() in a finally block to release the file handles and the render cache. | https://docs.aspose.com/slides/java/convert-powerpoint-to-pdf/ |
| Slide thumbnails | Render any slide to a bitmap at a size you pick, with no PowerPoint and no screenshot. | ISlide -> IImage -> PNG | getImage() also accepts a scale pair or a RenderingOptions for notes and comments. Dispose each IImage as you go so a long deck never holds every bitmap at once. | https://docs.aspose.com/slides/java/convert-slide/ |
| Charts from data | Turn your own arrays into a native PowerPoint chart that stays editable after you hand it over. | double[] -> IChart -> PPTX | The chart carries a real embedded workbook, so whoever opens the deck can pull up the data sheet and change a number. | https://docs.aspose.com/slides/java/create-chart/ |
| Protect | Encrypt a deck so it cannot be opened, and mark it so it cannot be saved over. | PPTX -> encrypted PPTX | encrypt() sets the open password and genuinely encrypts the file. setWriteProtection() only sets the modify password, and does not. | https://docs.aspose.com/slides/java/password-protected-presentation/ |
| Merge | Fold several decks into one, carrying each slide's layout and master across with it. | 3 x PPTX -> 1 PPTX | addClone() brings the source layout and master along when the destination has no match. Overloads let you force a destination layout or master instead. | https://docs.aspose.com/slides/java/merge-presentation/ |

```
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

public class ConvertPresentation {
    public static void main(String[] args) {
        Presentation presentation = new Presentation("quarterly-review.pptx");
        try {
            presentation.save("quarterly-review.pdf", SaveFormat.Pdf);
            presentation.save("quarterly-review.html", SaveFormat.Html);
            presentation.save("quarterly-review.tiff", SaveFormat.Tiff);
        } finally {
            presentation.dispose();
        }
    }
}
```

```
import com.aspose.slides.IImage;
import com.aspose.slides.ISlide;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;

import java.awt.Dimension;

public class SlideThumbnails {
    public static void main(String[] args) {
        Presentation presentation = new Presentation("quarterly-review.pptx");
        try {
            Dimension size = new Dimension(1280, 720);
            for (int i = 0; i < presentation.getSlides().size(); i++) {
                ISlide slide = presentation.getSlides().get_Item(i);
                IImage image = slide.getImage(size);
                try {
                    image.save("slide-" + (i + 1) + ".png", ImageFormat.Png);
                } finally {
                    image.dispose();
                }
            }
        } finally {
            presentation.dispose();
        }
    }
}
```

```
import com.aspose.slides.ChartType;
import com.aspose.slides.IChart;
import com.aspose.slides.IChartDataWorkbook;
import com.aspose.slides.IChartSeries;
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

public class ChartFromData {
    public static void main(String[] args) {
        String[] quarters = { "Q1", "Q2", "Q3", "Q4" };
        double[] revenue = { 18.4, 21.9, 20.1, 26.7 };

        Presentation presentation = new Presentation();
        try {
            ISlide slide = presentation.getSlides().get_Item(0);
            IChart chart = slide.getShapes().addChart(ChartType.ClusteredColumn, 40, 40, 620, 400);

            IChartDataWorkbook book = chart.getChartData().getChartDataWorkbook();
            chart.getChartData().getSeries().clear();
            chart.getChartData().getCategories().clear();

            chart.getChartData().getSeries().add(book.getCell(0, 0, 1, "Revenue"), chart.getType());
            IChartSeries series = chart.getChartData().getSeries().get_Item(0);

            for (int i = 0; i < quarters.length; i++) {
                chart.getChartData().getCategories().add(book.getCell(0, i + 1, 0, quarters[i]));
                series.getDataPoints().addDataPointForBarSeries(book.getCell(0, i + 1, 1, revenue[i]));
            }

            series.getLabels().getDefaultDataLabelFormat().setShowValue(true);

            presentation.save("revenue.pptx", SaveFormat.Pptx);
        } finally {
            presentation.dispose();
        }
    }
}
```

```
import com.aspose.slides.LoadOptions;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

public class ProtectPresentation {
    public static void main(String[] args) {
        Presentation presentation = new Presentation("quarterly-review.pptx");
        try {
            presentation.getProtectionManager().setWriteProtection("do-not-edit");
            presentation.getProtectionManager().encrypt("open-sesame");
            presentation.save("quarterly-review-protected.pptx", SaveFormat.Pptx);
        } finally {
            presentation.dispose();
        }

        LoadOptions options = new LoadOptions();
        options.setPassword("open-sesame");

        Presentation reopened = new Presentation("quarterly-review-protected.pptx", options);
        try {
            System.out.println("Encrypted: " + reopened.getProtectionManager().isEncrypted());
            System.out.println("Write protected: " + reopened.getProtectionManager().isWriteProtected());
        } finally {
            reopened.dispose();
        }
    }
}
```

```
import com.aspose.slides.ISlide;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;

public class MergePresentations {
    public static void main(String[] args) {
        String[] sources = { "results.pptx", "appendix.pptx" };

        Presentation merged = new Presentation("intro.pptx");
        try {
            for (String path : sources) {
                Presentation source = new Presentation(path);
                try {
                    for (ISlide slide : source.getSlides()) {
                        merged.getSlides().addClone(slide);
                    }
                } finally {
                    source.dispose();
                }
            }

            merged.save("deck.pptx", SaveFormat.Pptx);
        } finally {
            merged.dispose();
        }
    }
}
```

## Browse by operation

| Operation | Href | Note | Language | Icon |
|---|---|---|---|---|
| Conversion | /slides/java/conversion/ | Convert between presentation, document and image formats. | Java | conversion |
| Merger | /slides/java/merger/ | Combine several presentations, documents or images into one file. | Java | merger |
| Editor | /slides/java/editor/ | Open a file, change it and write it back, format by format. | Java | editor |
| Viewer | /slides/java/viewer/ | Open a presentation and render it for viewing. | Java | viewer |
| Parser | /slides/java/parser/ | Extract text, images, audio and video from a presentation. | Java | parser |
| Metadata | /slides/java/metadata/ | Read and write presentation document properties. | Java | metadata |
| Watermark | /slides/java/watermark/ | Add a text or image watermark. | Java | watermark |
| Protect | /slides/java/protect/ | Password-protect a presentation. | Java | protect |
| Unlock | /slides/java/unlock/ | Remove password protection. | Java | unlock |
| Redaction | /slides/java/redaction/ | Find and replace sensitive text. | Java | redaction |
| Search | /slides/java/search/ | Find text across the slides of a presentation. | Java | search |
| Annotation | /slides/java/annotation/ | Remove comments and annotations. | Java | annotation |
| Chart | /slides/java/chart/ | Create and edit charts on slides. | Java | chart |

## What goes in, what comes out

- **Read and written** (presentation files, proven by writing each one and reading it back) — FODP, ODP, OTP, POT, POTM, POTX, PPS, PPSM, PPSX, PPT, PPTM, PPTX
- **Read only** (no writer in the API) — PPT95
- **Written only** (export targets, not presentation files) — GIF, HTML, HTML5, MD, PDF, SWF, TIFF, XML, XPS
- **Slide images** (rendered from a slide) — BMP, EMF, GIF, JPEG, PNG, SVG, TIFF
- **Other content read in** (placed into a presentation rather than opened as one) — HTML, PDF, raster image

Read from the shipping package on 2026-08-21 by writing each file out and reading it back in.

## Capabilities, one line each

## Runs where your code already runs

| Runtime | Note | Platforms |
|---|---|---|
| .NET | The C# and VB.NET build of the same object model, on .NET and .NET Framework. | WINDOWS · LINUX · MACOS |
| C++ | A native build for C++ projects, with no managed runtime sitting underneath it. | WINDOWS · LINUX · MACOS |
| Python via .NET | The Python package, with the .NET runtime it needs shipped inside the wheel. | WINDOWS · LINUX · MACOS |
| PHP via Java | This same JAR, driven from PHP over a Java bridge. A JVM is required there too. | WINDOWS · LINUX · MACOS |
| Android via Java | The same object model built against the Android runtime, for on-device work. | ANDROID |

## Start with the trial, license when you ship

The trial is the full API. It applies an evaluation watermark when a presentation is opened or saved and replaces extracted text with an evaluation notice, so you can test the formats you actually care about before you talk to anyone. A temporary licence lifts both for 30 days.

## If you don't want a library

Aspose.Slides Cloud is a hosted REST API for loading, creating, editing and converting presentations.

- [cURL](https://products.aspose.cloud/slides/curl/)
- [.NET SDK](https://products.aspose.cloud/slides/net/)
- [Java SDK](https://products.aspose.cloud/slides/java/)
- [All low-code APIs →](https://products.aspose.cloud/slides/family/)

## No-code apps

- [Viewer](https://products.aspose.app/slides/viewer)
- [Conversion](https://products.aspose.app/slides/conversion)
- [Annotation](https://products.aspose.app/slides/annotation)
- [All apps →](https://products.aspose.app/slides/family)

## Resources

- [Documentation](https://docs.aspose.com/slides/java/)
- [API reference](https://reference.aspose.com/slides/java/)
- [Support forum](https://forum.aspose.com/c/slides/)
- [Installation](https://docs.aspose.com/slides/java/installation)

## In use

The product worked as advertised, the documentation was easy to follow, and the support forums were all the help we needed. The final solution that we deployed has exceeded our initial expectations by a great deal.

— BRUCE BRIEN · STRATASCOPE INC, USA
