ODP to HTML

Your presentation never leaves your browser, and nothing is downloaded to make this work. An OpenDocument file is a ZIP of XML and your browser can already unzip; the rest is reading.

…or drop one anywhere on this page.

One web page, one section per slide.

A complete document you can open anywhere, with each slide as its own section and a stylesheet that works in dark mode. It is a reading version of the talk rather than a copy of it: a slide is boxes at coordinates and a page reflows, so what is carried is the words and their structure.

The speaker notes are inside the slide

This is the one thing about the format that catches every converter written in an afternoon. A presentation's notes are not a separate file or a separate section: presentation:notes is a child of the slide, holding frames and paragraphs shaped exactly like the slide's own.

So the obvious reader — unzip, find every text:p, take the text — hands you back every slide with the presenter's private remarks glued onto the end of it. Nothing errors. Nothing looks wrong. The notes simply become part of the talk, and the first anybody knows is when they read it.

Here they are read separately, counted, and left out unless you ask for them. The count is on screen either way, because “this deck had eleven paragraphs of notes and you have not got them” is worth knowing.

And a run of spaces is not spaces

OpenDocument does not store repeated spaces as characters. Two or more become one <text:s text:c="6"/> element, a tab becomes <text:tab/> and a line break inside a paragraph becomes <text:line-break/>. Take only the character data and “Q1      Q2” comes out as “Q1Q2” — a silent corruption that reads like a typo in the original. All three are expanded here, and tested against a file odfpy wrote.

What does not come across

The layout. A slide is boxes at coordinates; this is a document that reads top to bottom, so two columns become one after the other. Backgrounds, master-slide furniture, transitions and animations have nowhere to go. Pictures, charts and embedded objects are counted and named but not carried, because they are separate files inside the package.

Page numbers, dates and footers are dropped on purpose: they are marked as furniture in the file, and repeating “Slide 4 of 20” through a transcript helps nobody.

Where to go next