Guide · 5 min read · Updated 2026-08-09
Jupyter notebook to PDF without LaTeX
Skip the multi-gigabyte TeX install. Drop the .ipynb file in and get a PDF.
This file never leaves your browser.
The official way to turn a notebook into a PDF is nbconvert, and it works well — once you have a working LaTeX installation. Getting there means installing a TeX distribution measured in gigabytes, then debugging missing package errors that mention files you have never heard of. For a one-off PDF to send a supervisor or attach to a report, that is a lot of setup.
If you need journal-grade typesetting, nbconvert with LaTeX remains the right tool. If you need a readable PDF of your analysis, there is a much shorter path.
What is actually inside an .ipynb file
A notebook is a JSON document. It contains an ordered list of cells, each tagged as markdown, code, or raw, and each code cell carries its stored outputs from the last time it ran. That structure is all a converter needs — the notebook already knows which parts are prose, which are code, and what the code printed.
One consequence worth internalising: the outputs in the file are whatever was there when it was saved. The converter reads stored outputs, it does not execute anything. If you edited a cell and did not re-run it, the PDF shows the stale output. Restart and run all before converting anything you intend to share.
How the conversion below works
- 1Markdown cells become formatted proseHeadings, paragraphs, and lists are rendered with real typographic hierarchy, so the narrative structure of your analysis survives into the PDF.
- 2Code cells become monospaced blocksCode is laid out in a monospaced font with the execution count preserved, so the reading order matches the order things actually ran.
- 3Stored outputs are placed under their cellPrinted text and stream output appear directly beneath the code that produced them, which is the layout that makes a notebook readable as a document rather than a listing.
- 4Everything paginates onto A4Long cells break across pages rather than being clipped at the page edge. The result reports the cell count and page count so you can confirm nothing was dropped.
This file never leaves your browser.
The alternatives, and when to use them
Print to PDF from the browser: open the notebook in Jupyter and use your browser print dialog. Zero setup, and it captures plots. The downside is that page breaks land wherever they land, often mid-cell, and the Jupyter chrome sometimes bleeds into the output.
nbconvert to HTML, then print: better than printing directly because the HTML has no interface elements. Two steps, but it needs no LaTeX and preserves plot images faithfully.
nbconvert with LaTeX: the best typography and correct handling of mathematical notation. Use it when the PDF is going into a paper or a thesis. Accept the install cost.
Why the local processing matters here
Notebooks leak more than people expect. Outputs commonly contain sample rows of real data, database connection strings in tracebacks, API keys pasted into a cell during debugging, and internal hostnames. Uploading a notebook to a conversion service uploads all of that with it. The converter above runs in your browser, so the file never leaves your machine.
Frequently Asked Questions
Will my matplotlib plots appear in the PDF?
Text and stream outputs are handled well. Image outputs are limited in this converter. For a plot-heavy notebook, export to HTML with nbconvert and print that to PDF instead — you will get faithful figures with no LaTeX install.
Does it run my code?
No. It reads the outputs already saved in the file. This is why restarting and running all before converting matters — the converter faithfully reproduces stale output if that is what the file contains.
Are LaTeX equations in markdown cells rendered?
Inline maths in markdown cells is rendered as text rather than fully typeset. For notebooks where equations are the point, use nbconvert with LaTeX.
Can I convert several notebooks at once?
One at a time here. For a whole directory, a shell loop over nbconvert is the practical answer.