Skip to content
Apertura
.pptxPresentationMLBeta

PowerPoint in the browser

A fixed canvas, which is why it can get very close.

A slide has no pagination to disagree about: every shape carries absolute coordinates in EMU. That removes the single hardest problem in document rendering, and it is why the presentation renderer is measured against PowerPoint’s own PDF export — ink against ink, not words against words.

sample.pptx
0 requests · nothing uploaded
Loading the viewer…
formatstatusidleopened inrendered bythis browser
What is supported

Everything below is parsed from the file, not approximated

Slides and layouts

The master → layout → slide inheritance chain, placeholders resolved through it, slide size and orientation, speaker notes, and hidden slides.

Shapes and text

Preset geometries, fills, outlines, grouped shapes, text bodies with paragraph and run properties, bullets and autonumbered lists, and text set on its side.

Tables and charts

Table styles with their conditional blocks, and DrawingML charts drawn by the shared @apertura/chart package — the chart part is identical in Word, Excel and PowerPoint, and so is the code that draws it.

Theme

Colour maps and overrides, the theme font slots, and the effect and format schemes shapes refer to.
Known limitations

What we get wrong, published rather than discovered

A viewer that claims perfection loses the deal the moment somebody drops in their worst file. This list is the alternative.

How this is measured
  • SmartArt without a cached drawing falls back to the text of its data model.
  • WordArt warping (a:prstTxWarp) renders as straight text at the declared size.
  • Three-dimensional scenes (a:scene3d, a:sp3d) render flat, in place.
  • Animations and transitions are ignored — this is a viewer, not a player.
Found another one?
Send the file. It joins the corpus, which is the difference between a fix and a fix that stays.
Using it

The viewer, and the parser on its own

The parser produces a model that knows nothing about CSS or the DOM, so the same call runs in Node for extraction, search and conversion.

import { DocumentViewer } from '@apertura/react';

<DocumentViewer file={file} fit="width" />;

Other formats

WordStable

Paginated the way Word paginates — by measuring, not by guessing.

ExcelStable

Shows what the author saw, not what the file stores.