ODT to PDF — Convert OpenDocument Text to PDF Online
Convert OpenDocument Text (.odt) files from LibreOffice / OpenOffice to a paginated PDF. Headings, paragraphs, lists, and inline emphasis are preserved.
Drop your ODT file hereTap to select a file
Supports ODT, up to 50MB
What to do next
Related tools
RTF to PDF
Convert Rich Text Format (.rtf) documents to a clean paginated PDF. Bold, italic, paragraphs, and headings are preserved.
pdfText to PDF Converter
Convert a plain text file (.txt) to a properly formatted PDF document with automatic word wrap and page breaks.
pdfHTML to PDF
Convert an HTML file to a styled PDF. Headings, paragraphs, lists, links, and inline emphasis are preserved with semantic typography.
pdfPDF to Text Extractor
Extract all text content from a PDF and download it as a plain text file. Preserves reading order across all pages.
pdfAbout ODT to PDF
ODT to PDF converts an OpenDocument Text file — the native format of LibreOffice and OpenOffice and the ISO/IEC 26300 standard mandated by several governments and academic publishers — into a paginated PDF. The conversion runs entirely inside the browser tab. An .odt file is in fact a ZIP archive whose primary payload is content.xml; the converter unpacks the archive locally with the bundled jszip library, parses content.xml with the browser’s built-in DOMParser, walks the OpenDocument element tree, and hands the resulting block list to the open-source pdf-lib JavaScript library to lay out onto A4 portrait pages. No part of the file ever leaves your device.
Heading paragraphs (text:h with their outline-level attribute) become a six-step typographic scale that matches the document’s hierarchy. Body paragraphs (text:p) flow with line wrapping. Inline emphasis is decoded by reading the document’s automatic-styles section: each text:span carries a style-name attribute that resolves to a style:text-properties block whose fo:font-weight and fo:font-style attributes determine bold and italic. Built-in style names (Strong_20_Emphasis, Emphasis, Bold, Italic) are recognised even when the document’s automatic-styles do not redefine them. This is the same resolution the LibreOffice renderer does, just inside the browser.
Lists are rendered with proper depth and ordering. The OpenDocument list model nests text:list elements inside text:list-item to express sub-lists, and the converter walks the nesting correctly so a three-level outline indents three levels in the output. Whether each list is ordered or unordered is determined by inspecting the corresponding text:list-style block and looking for text:list-level-style-number versus text:list-level-style-bullet — the same hint LibreOffice reads. Numbered lists are rendered with arabic numerals; bulleted lists use a clean round bullet glyph.
Page breaks are honoured in two forms: explicit text:soft-page-break elements emitted by LibreOffice during pagination, and paragraph styles whose fo:break-before attribute is set to "page" (the standard way to force a section onto a new page in OpenDocument). Both produce a hard page break in the output PDF. Inline links (text:a with xlink:href) are visually styled in a contrasting blue, with the link URL preserved alongside the anchor text.
What is intentionally NOT rendered: embedded images and frames (draw:frame, draw:image), tables (table:table), tracked changes, comments (office:annotation), fields (text:variable, text:date), and complex frame layouts. These omissions match what other browser-side ODT tools do; LibreOffice’s own "Export as PDF" dialogue is the right choice when you need pixel-perfect fidelity, since it uses the same renderer that displayed the document on screen. This tool is for the case where the recipient just needs the readable content — a manuscript, a meeting agenda, a research draft, an academic paper draft — and you want a clean PDF without firing up a desktop office suite.
Files up to 50 MB are accepted. Pure-text ODT documents are usually under 1 MB even for long manuscripts because the ZIP container compresses XML aggressively, so this cap is wildly above any realistic single document. Conversion is fast on desktop (most documents finish in well under a second) and a touch slower on mobile because phone CPUs have less single-thread throughput. The output is a direct download of what the pipeline produced.
How it works
- 1Pick an .odt file from your device. ODT is the OpenDocument Text MIME type used by LibreOffice and OpenOffice.
- 2The bundled jszip library unpacks the archive locally; content.xml and styles.xml are extracted into memory.
- 3DOMParser parses both XML files; automatic-styles and built-in style names are resolved into bold/italic flags per text:span.
- 4The OpenDocument element tree is walked into headings, paragraphs, nested lists, and page breaks.
- 5pdf-lib paginates the block list onto A4 portrait pages with consistent typography and outputs a downloadable PDF.
Common use cases
- Convert a research draft written in LibreOffice into a PDF for an advisor who only opens PDFs
- Turn an OpenOffice meeting agenda into a PDF for distribution to attendees
- Archive a manuscript chapter as a stable PDF copy alongside the editable .odt source
- Convert a government-issued ODT form into a PDF after filling it in
- Bundle a course handout written in OpenDocument into a PDF for upload to a learning portal
- Produce a PDF of a free-software project’s ODT documentation for sharing on a wiki
FAQ
What ODT features are supported?
Headings (Heading 1–6), paragraphs, ordered and unordered lists, bold and italic spans, page breaks, and inline links. Embedded images, tables, and complex frame layouts are not rendered in this version.
Why does ODT exist if Word .docx is everywhere?
ODT is the ISO/IEC 26300 OpenDocument standard, the native format of LibreOffice and OpenOffice and the mandated archival format for several governments and academic institutions. Many open-source workflows produce ODT and need a PDF to share.
Is the file uploaded?
No. ODT is a ZIP archive — it is unpacked locally with the bundled jszip library, the content.xml inside is parsed with the browser’s DOMParser, and the resulting PDF is generated by the open-source pdf-lib JavaScript library entirely on your device.
Will the layout match LibreOffice’s "Export as PDF"?
Structurally yes — the same headings, paragraphs and list items appear in the same order. Pixel-perfect typography requires the same fonts as LibreOffice; this tool uses the standard PDF Helvetica family for portability.
What’s the maximum input size?
Files up to 50 MB are supported per run. Pure-text ODT documents are usually under 1 MB even for long manuscripts, so this covers very large documents.
Why is ODT a thing — isn’t Word’s .docx universal?
ODT is the ISO/IEC 26300 OpenDocument standard, ratified in 2006 specifically so governments, academic institutions, and free-software users have a vendor-neutral office format. Several national governments (Germany, the Netherlands, Brazil, India, the UK in part) require their public documents to be available in OpenDocument. LibreOffice and OpenOffice use it natively; if you collaborate with anyone using those, ODT files are unavoidable.
Will the output match LibreOffice’s "Export as PDF" exactly?
Structurally yes — the same headings appear in the same order with the same hierarchy, the same paragraphs flow in the same sequence, the same list items appear with the same depth. Pixel-perfect typography requires the same fonts as LibreOffice; this converter uses the standard PDF Helvetica family for portability across every viewer. If exact font matching matters, use LibreOffice’s built-in PDF export instead — that runs the same renderer that displayed the document on screen.
Are embedded images supported?
Not in this version. ODT stores images either as draw:image references inside draw:frame elements (linking to a Pictures/ folder inside the ZIP) or as inline base64 data. Decoding both, sizing the result against the document’s frame layout, and pagination interactions add substantial complexity. Pure-text documents convert without losing anything.
What about tables?
Not yet. ODT tables (table:table) have a column-width layout model that requires a separate measurement pass to render correctly. Documents containing tables will still convert successfully — the cell text appears in reading order — but the grid structure is flattened. Bordered table rendering is on the roadmap.
Does it handle nested lists correctly?
Yes. ODT nests text:list elements inside text:list-item, and the walker recurses into the nesting so a three-level outline indents three levels in the output. Whether each level is ordered or unordered is determined by inspecting the document’s text:list-style entries (text:list-level-style-number vs text:list-level-style-bullet), the same hint LibreOffice reads.
Is the file uploaded?
No. ODT is a ZIP archive — it is unpacked locally in your tab using jszip. content.xml is parsed by DOMParser. The PDF is generated by pdf-lib. All three steps happen inside your browser; nothing is sent to a server, nothing is written to disk, and closing the tab discards every byte from memory.
What’s the maximum file size?
The uploader accepts ODT files up to 50 MB per run. Pure-text ODT documents are usually well under 1 MB even for long manuscripts because the ZIP container compresses XML aggressively. The cap is generous enough for any realistic single document plus a healthy margin for embedded fonts or a moderate number of images.
Will it convert .odp (presentations) or .ods (spreadsheets)?
No. Those are different OpenDocument formats with completely different content schemas — .odp uses draw:page elements for slides, .ods uses table:table with cell coordinates. Each needs its own dedicated converter. For .ods, the .xlsx-style spreadsheet converter handles the closely-related OOXML format; for .odp, we are tracking it as a separate planned tool.