SaveAI
Back to blog

Export AI Chats to PDF Without Broken Layouts

August 2026 · 5 min read

Exporting an AI conversation looks like it should be trivial: the text is right there on screen. Then you open the PDF and find code running off the right edge, a page that is two-thirds empty in front of every image, and a formula printed as a row of backslash commands.

None of that is bad luck. Each one is a specific, reproducible failure of turning a chat into paginated pages, and each has a specific fix. Here is what actually goes wrong, and what a renderer has to do about it.

Pagination: the failures you only see after printing

The single most common mistake is telling every block to stay whole. It sounds careful — nobody wants a table split in half — but a block taller than a page then has nowhere to go, so the renderer pushes it to the next page and leaves the current one blank. Long code blocks, long quotes and tall images all trigger it. The rule that actually works is the opposite: anything that can exceed one page must be allowed to break, and only genuinely small things (a heading and the line under it, a figure and its caption) get held together.

Code is the second one. In a browser a code block scrolls sideways; on paper there is no sideways. If the lines are not wrapped before rendering, everything past the right margin is simply gone — and you will not notice until you print it. Wide tables have the same problem, plus a second one: a comparison table longer than a page has to continue on the next page rather than be cut at the margin.

Images need a ceiling. A tall portrait image and the heading above it can fuse into a single unbreakable block that fits nowhere, and again the page before goes blank. Capping an image at roughly two-thirds of the page height keeps it placeable. SaveAI's PDF export applies all of these; if you want to see it on your own conversation, the platform pages walk through it — ChatGPT to PDF, Claude to PDF, Gemini to PDF.

A Python code block and a data table in a SaveAI PDF export: every code line wraps inside the page width and the table keeps all four rows
SaveAI's PDF export settings: engine (server or local), paper size, orientation, body font size, content scale, image quality, the four page margins, page numbers and their position, the per-page footer and an optional watermark

Fonts, CJK glyphs and maths

If you write Chinese, Japanese or Korean, there is a failure most exporters never notice: the same Han character is drawn differently in each language. Ask for a generic sans-serif and the renderer picks whichever CJK font it happens to have, so a Chinese conversation can come out shaped in Japanese forms. It is legible, it is subtly wrong, and it is invisible to anyone who does not read the language. The fix is to detect the document's language and name that region's font family explicitly, ahead of any generic family.

Then there is tofu — the □ boxes. They come from characters that survived being displayed in a browser but cannot survive being encoded on the way into a PDF: unpaired surrogates, replacement characters that were already broken upstream, and Unicode noncharacters. They have to be stripped at the point of rendering, not hidden with a fallback font, and the user should be told how many were removed rather than having their text silently edited.

Maths has two separate paths. Formulas written between dollar signs are typeset properly — and the maths fonts are embedded only when a formula is actually present, so a chat without maths does not carry roughly 400 KB it never uses. But models also emit bare LaTeX environments — \begin{equation} … \end{equation} with no delimiters at all — and unless those are recognised too, they print as raw commands in the middle of your document.

Inline and display maths typeset in a SaveAI PDF export, with Chinese body text rendered in the correct regional glyph shapes

What ends up in the file

Layout is only half of it. The other half is whether the export contains the conversation you actually had. Edited and regenerated messages leave branches behind in the underlying data, and a tool that reads the raw list will interleave abandoned drafts with the thread you were reading. The conversation on your screen is one specific branch, and an export has to follow that same branch.

Length is the next trap. Long conversations do not arrive in one response — history comes back one page at a time, sometimes newest-first — so an export that stops at the first page silently loses most of the chat. Images have their own version of this: a remote image URL that the reader cannot load is a broken-image box, so images must be embedded into the file, and anything that genuinely cannot be fetched is better dropped than left as a dead link.

Finally, reasoning. Extended thinking can be several times longer than the answer. That is worth keeping when you are reviewing how a conclusion was reached and pure noise when you are handing the document to someone else, so it should be a switch you flip before exporting — not a decision made for you.

The SaveAI extension popup open on a ChatGPT conversation, offering PDF, Markdown, Word, TXT, long screenshot and JSON export

Two ways to get this. The SaveAI browser extension exports the conversation you are looking at — PDF, Word, Markdown, JSON, TXT or one long screenshot — straight from the page, free and unlimited, with the pagination, font and completeness handling above already applied.

If you already have the text as a file, the free online converter does the same rendering in your browser: Markdown to PDF, Word, HTML, TXT, JSON or CSV, no account needed. And if you have downloaded an official data export from your AI provider, the reader for ChatGPT, Claude or Gemini turns that archive into readable documents.

The three in-page ways to export: the camera button's format menu next to an answer, the browser right-click menu with the SaveAI submenu, and the drawer on the right edge of the page

Ready to start exporting?

SaveAI works on 14 AI sites including ChatGPT, Claude, Gemini. Free to start, local-first.

Install for Chrome Free Install for Edge Free Install for Firefox Free