Skip to content
Genom

Open an old PowerPoint 97-2003 deck

Free, no sign-up, and the file never leaves your computer.

Samplesample.ppt
Loading the viewer…
Also opensDrop any of them on the viewer above — the format is recognised from the bytes.

A .ppt is not a .pptx. There is no XML, no parts and no names — one stream of records, where a slide is a record somewhere in the middle and a title is not in the slide at all but in a list the document keeps separately.

This reads that structure directly into the same deck model the modern format produces. Nothing is converted, and nothing is sent anywhere.

How the format actually works

The file holds every draft, and nothing marks which are dead

PowerPoint never rewrote a .ppt when you edited it. It appended a fresh copy of the changed slide to the end of the stream and left the old one exactly where it was, so a presentation of forty slides can contain four hundred — most of them superseded. Nothing in the stream flags a record as obsolete. What decides is a separate structure, the persist directory, which maps each slide to the one copy that is current; a reader that walks the records in order instead gets the deck interleaved with every draft it passed through on the way. There is a second trap in the same file: the picture store sits in the drawing group record while the picture *bytes* live in a stream of their own, referenced only by offset — so the store looks empty to anyone who does not know to go and find them.

What is supported

Everything below is parsed from the file, not approximated

Read from the bytes the format actually stores, into a model that does not know which generation produced it.

The stream, and which half of it is alive

PowerPoint saved incrementally: editing a slide appended a new copy to the end of the stream and left the old one where it was, so a file of forty slides may hold four hundred and nothing marks a record as dead. The persist directory says which copy is current, and reading it is the difference between the deck as it was last saved and every draft it ever passed through, interleaved.

Slides and their text

The outline record is two things at once — the table of contents naming the record that holds each slide, and the place the text of every outline placeholder actually lives, as stories following the atom they belong to. Both are read, so a title comes out attached to its slide rather than as a loose string.

Typography

The document’s shared font collection, resolved before any slide is read, because a run names its typeface by number and "font 3" is Verdana in one presentation and a CJK face in the next. Character and paragraph properties out of the masters’ typography tables, with the per-run overrides that sit on top of them.

Shapes and pictures

The Office Art drawing layer shared with .doc and .xls, with the twist this format adds: the picture store is in the drawing group record while the bytes are in a stream of their own that each entry names by offset, so the store reads as empty unless you know to look elsewhere. PNG and JPEG pass through, device-independent bitmaps are wrapped, and EMF and WMF are translated into SVG.

Tables and SmartArt, where PowerPoint left them

A .ppt has neither. PowerPoint 97 drew a table as a grid of separate text boxes with lines between them and nothing said the grid was a table — so when a later PowerPoint saves to this format it writes the grid for old readers and, beside it in a shape property, a complete little OPC package holding the real construct. That package is read, which is why a table saved by a modern PowerPoint comes back as a table rather than as loose boxes.

PowerPoint 95

The generation before this one is read as well, to the extent its records allow.
Being straight with you

What this does not do

Every renderer has a list like this. Most do not publish it.

  • Ink placement is measured at about 82% of lines landing where PowerPoint puts them — below .pptx, which has absolute coordinates for everything.
  • Italic runs are the weakest of the character properties, matching about 94% of the reference.
  • A table or diagram written by PowerPoint 97 itself, with no modern package beside it, stays a grid of text boxes — there is nothing in the file that says otherwise.
  • Animations and transitions are ignored, as in the modern format.
  • Encrypted presentations are detected but cannot be opened.

If a file of yours renders wrong, send it to admin@genom.dev. It joins the corpus everything is measured against, which is what makes a fix stay fixed.

Questions

Things people ask

Is my presentation uploaded anywhere?
No. The file is opened by JavaScript running in this tab and is never sent anywhere — there is no upload, no server-side conversion and no copy kept. You can confirm it: open your browser’s network panel, then open a file. Nothing leaves. This also means the page works with no connection at all once it has loaded.
Is the file converted to .pptx first?
No. The binary record stream is parsed straight into the same model the modern format produces, so the same renderer draws it and the same extractor reads it. Nothing round-trips through another format.
Do tables and SmartArt come out?
It depends who saved the file. A .ppt has no concept of a table — PowerPoint 97 drew one as a grid of separate text boxes with lines between them. When a later version of PowerPoint saves to this format it writes that grid for old readers and, beside it in a shape property, a complete package describing the real table; that is read, so the table comes back. A grid drawn by PowerPoint 97 itself stays a grid of text boxes, because nothing in the file says otherwise.
How close is it to PowerPoint?
Measured across 311 presentations and 2,681 slides against PowerPoint’s own export: every slide accounted for, 98.5% of words and 99.5% of placeholders matched. Ink placement is the weaker number, with about 82% of lines landing where PowerPoint puts them — a modern .pptx does better there because every shape carries absolute coordinates.
Using it in your own code

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. PowerPoint 97-2003 and its other generation are one package.

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

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