ASPOSE.SLIDES FOR NODE.JS VIA JAVA · ON-PREMISES LIBRARY · JDK 8 REQUIRED · NO MICROSOFT OFFICE

PowerPoint files, from Node.js.

Aspose.Slides for Node.js via Java creates, edits, converts and renders PowerPoint and OpenDocument presentations from server-side JavaScript. It is not a native port: one npm package wraps the Java engine and drives it through the node-java bridge, so a JVM is loaded into your Node process and a JDK 8 or later has to be installed with JAVA_HOME set. Past that it runs in your own process on Windows, Linux or macOS - no Office install, no COM automation, no display server.

Download free trial Documentation Full API on trial · watermark on output
Install
NPM
npm install aspose.slides.via.java
Require
const aspose = require("aspose.slides.via.java");
Prerequisite
JAVA_HOME set to a JDK 8 or later
Other platforms, same object model
RUNS ON

Windows, Linux and macOS, wherever Node.js and a JDK both run. The package is the Java engine driven through the node-java bridge, so a JDK 8 or later must be installed and JAVA_HOME set; a JVM is loaded into your Node process rather than a native library. Installing the bridge compiles a native addon, which needs node-gyp and a C++ toolchain: Build Tools on Windows, build-essential and Python on Linux, Xcode Command Line Tools on macOS. Linux containers should also carry a font package, so text is not silently substituted. No Microsoft Office installation on the machine that runs it.

Prefer not to host it yourself? The same work is available as a hosted REST API through Aspose.Slides Cloud.

  • 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

    npm package. It pulls the node-java bridge in with it, and that bridge compiles a native addon at install time, so a node-gyp toolchain has to be present.

  • JDK 8

    or later, with JAVA_HOME set. This build runs the Java engine in a JVM inside your Node process, so a JDK is a genuine prerequisite. Microsoft Office still is not.

Five things people actually write

All examples on GitHub →

Each sample is the whole program, Node.js as shipped. Pick the job on the left.

PPTX -> PDF / HTML / TIFF JAVASCRIPT
const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("quarterly.pptx");
try {
    const pdfOptions = new aspose.slides.PdfOptions();
    pdfOptions.setSufficientResolution(300);
    pdfOptions.setTextCompression(aspose.slides.PdfTextCompression.Flate);
    pdfOptions.setCompliance(aspose.slides.PdfCompliance.Pdf15);

    presentation.save("quarterly.pdf", aspose.slides.SaveFormat.Pdf, pdfOptions);
    presentation.save("quarterly.html", aspose.slides.SaveFormat.Html);
} finally {
    presentation.dispose();
}
One save call per target. PdfOptions, HtmlOptions and TiffOptions set resolution, compression and compliance when the defaults are not what you want. Documentation →
Slide -> PNG JAVASCRIPT
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");

const presentation = new aspose.slides.Presentation("quarterly.pptx");
try {
    const size = java.newInstanceSync("java.awt.Dimension", 960, 540);

    for (let index = 0; index < presentation.getSlides().size(); index++) {
        const slide = presentation.getSlides().get_Item(index);
        const image = slide.getImage(size);
        try {
            image.save("slide-" + (index + 1) + ".png", aspose.slides.ImageFormat.Png);
        } finally {
            image.dispose();
        }
    }
} finally {
    presentation.dispose();
}
getImage renders at slide size; pass scale factors or a java.awt.Dimension for exact pixels. Dispose every image, since each one holds a Java object. Documentation →
Rows -> ClusteredColumn chart JAVASCRIPT
const aspose = { slides: require("aspose.slides.via.java") };

const quarters = ["Q1", "Q2", "Q3", "Q4"];
const revenue = [412, 468, 501, 587];

const presentation = new aspose.slides.Presentation();
try {
    const slide = presentation.getSlides().get_Item(0);
    const chart = slide.getShapes().addChart(
        aspose.slides.ChartType.ClusteredColumn, 40, 40, 640, 400);

    chart.setTitle(true);
    chart.getChartTitle().addTextFrameForOverriding("Revenue by quarter");

    const chartData = chart.getChartData();
    const workbook = chartData.getChartDataWorkbook();
    const sheet = 0;

    chartData.getSeries().clear();
    chartData.getCategories().clear();
    chartData.getSeries().add(workbook.getCell(sheet, 0, 1, "Revenue"), chart.getType());

    const series = chartData.getSeries().get_Item(0);
    for (let row = 0; row < quarters.length; row++) {
        chartData.getCategories().add(workbook.getCell(sheet, row + 1, 0, quarters[row]));
        series.getDataPoints().addDataPointForBarSeries(
            workbook.getCell(sheet, row + 1, 1, revenue[row]));
    }

    presentation.save("revenue.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}
The chart keeps an embedded workbook, so the numbers stay editable in PowerPoint after the file is written. Documentation →
PPTX -> encrypted PPTX JAVASCRIPT
const aspose = { slides: require("aspose.slides.via.java") };

const presentation = new aspose.slides.Presentation("quarterly.pptx");
try {
    presentation.getProtectionManager().encrypt("open-password");
    presentation.save("quarterly-encrypted.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

const loadOptions = new aspose.slides.LoadOptions();
loadOptions.setPassword("open-password");

const reopened = new aspose.slides.Presentation("quarterly-encrypted.pptx", loadOptions);
try {
    reopened.getProtectionManager().setWriteProtection("edit-password");
    reopened.save("quarterly-locked.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    reopened.dispose();
}
encrypt sets the password needed to open the file; setWriteProtection leaves it readable but asks for a password before changes are saved. Reopen with LoadOptions. Documentation →
PPTX + PPTX -> PPTX JAVASCRIPT
const aspose = { slides: require("aspose.slides.via.java") };

const destination = new aspose.slides.Presentation("intro.pptx");
const source = new aspose.slides.Presentation("appendix.pptx");
try {
    for (let index = 0; index < source.getSlides().size(); index++) {
        destination.getSlides().addClone(source.getSlides().get_Item(index));
    }
    destination.save("merged.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    source.dispose();
    destination.dispose();
}
addClone copies a slide with its layout and master. Other overloads re-map it onto the destination master instead. Documentation →

Browse by operation

Each operation has its own page, listing the formats it covers with a code sample for each.

What goes in, what comes out

Read in only

Other content read inplaced into a presentation rather than opened as one

  • HTML
  • PDF
  • raster image

Read onlyno writer in the API

  • PPT95

Aspose.Slides

12 formats 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

Written out only

Written onlyexport targets, not presentation files

  • GIF
  • HTML
  • HTML5
  • MD
  • PDF
  • SWF
  • TIFF
  • XML
  • XPS

Slide imagesrendered from a slide

  • BMP
  • EMF
  • GIF
  • JPEG
  • PNG
  • SVG
  • TIFF
Read from the shipping package on 2026-08-21 by writing each file out and reading it back in.

Capabilities, one line each

Every capability below is reachable from Node.js, because the package exposes the Java API through the node-java bridge under Java naming - getSlides, get_Item, dispose - rather than a separate JavaScript surface of its own.

As of 2026-08-18. 49 presentation SDKs and services surveyed. Next re-test: November 2026.

File formats
  • Reads OOXML presentations
  • Writes .pptx
  • Reads legacy binary PowerPoint
  • Writes legacy binary .ppt
  • Reads OpenDocument presentations
  • Writes .odp
  • Exports to PDF
  • Imports PDF into a presentation
  • Exports slides to raster images
  • Exports to HTML
  • Extracts text / Markdown / JSON
Deployment
  • Runs entirely on the customer's own infrastructure
  • Offered as a hosted API the customer calls — through Aspose.Slides Cloud, a separate product
  • Runs without a Microsoft Office / LibreOffice installation
  • Works with no outbound network access
Document operations
  • Create from nothing
  • Open, modify, save back
  • Preserve untouched content
  • Merge or append presentations
  • Slide thumbnails
  • Create charts
Non-functional
  • Published performance numbers — one published capacity figure, no benchmark suite
  • Air-gapped install and licensing
API & language reach
  • .NET · Java / JVM · Python · C / C++
  • JavaScript / TypeScript / Node · PHP
  • Android, SharePoint and JasperReports integrations
  • Language-agnostic REST/HTTP API — through Aspose.Slides Cloud, a separate product
Ecosystem & support
  • Public API reference and guides
  • Runnable sample projects
  • Paid support and escalation

Runs where your code already runs

Where a build of this library is supported, and what each target is for.

  • .NET

    The managed build. One NuGet package and nothing to install beside it, so no JVM and no node-gyp step.

    WINDOWS · LINUX · MACOS

  • Java

    The same engine this package wraps, called straight from JVM code instead of across a bridge.

    WINDOWS · LINUX · MACOS

  • Node.js via .NET

    The sibling npm build, aspose.slides.via.net. Same jobs over the .NET engine, wanting a .NET 6 runtime rather than a JDK.

    WINDOWS · LINUX · MACOS

  • Python via .NET

    pip install aspose-slides. The .NET runtime ships inside the wheel, so nothing else is installed.

    WINDOWS · LINUX · MACOS

  • C++

    A native build with no managed runtime at all, for processes that cannot host one.

    WINDOWS · LINUX · MACOS

The same object model ships for .NET, Java, Python, C++ and Node.js via .NET. Class and member names carry across; what changes is the runtime you install and the naming idiom it uses.All high-code APIs →

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.

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

ASPOSE.SLIDES FOR NODE.JS VIA JAVA · PRODUCTS.ASPOSE.COMPRESENTATION AUTOMATION WITHOUT MICROSOFT OFFICE