TL;DR

ChatGPT does not have a native "Export as PDF" button, and the browser's Print dialog quietly cuts off long threads because the chat UI only renders the messages currently in view. The fastest reliable method for a full conversation is a Chrome extension that scrolls the whole thread to the top, waits for lazy-loaded messages to attach, and then prints — no share links, no copy-paste. For most people, Convert: Web to PDF in Article Mode is the one-click answer. The four fallbacks below cover shared links, code-heavy chats, air-gapped machines, and the "I've already tried Ctrl+P and it broke" case.

Method 1: built-in Share > PDF

OpenAI's Share feature is the closest thing ChatGPT has to a native export, and it is the first thing to try if the conversation contains no images you care about and no in-progress "Advanced Data Analysis" outputs.

Open the chat, click the Share icon in the top-right of the message pane, and pick Create link. That publishes a snapshot at chatgpt.com/share/<id>. Open the share link in a new tab — this matters, because the shared page is a static render, not the live chat UI, and it does not lazy-load. Every message is in the DOM on first paint.

From there, Cmd+P on Mac or Ctrl+P on Windows opens the browser's print dialog, and picking Save as PDF in the destination dropdown gives you a full, scrollable PDF.

Where it breaks:

  • The share link snapshots only messages up to the moment you clicked. Anything you send afterwards is not in the PDF.
  • Uploaded images render, but files you attached (PDFs, CSVs, spreadsheets) show as filename chips only, not the underlying content.
  • Custom GPT names and system instructions are stripped from the shared view.
  • Chats that used the Analyze, Python, or Web Search tools sometimes lose the tool output blocks in the share render — the assistant's summary is preserved, but the raw table or chart is not.
  • Team and Enterprise workspaces can disable sharing at the admin level. If Create link is greyed out, that is why.

If you need the conversation as it looked on your screen, not as ChatGPT chose to render it publicly, skip this and go to Method 3.

Method 2: Ctrl+P > Save as PDF (with scroll fix)

This is what most people try first, and it is also where most people give up. The problem is that ChatGPT virtualizes the message list — older messages are unmounted from the DOM when they scroll far enough out of view, and new ones are attached only as you scroll back up. Print captures the DOM as it exists at the moment you hit Ctrl+P, which is why so many PDFs start halfway through the conversation.

The fix is to force every message into the DOM before printing:

  1. Click into the chat body.
  2. Press Cmd+Up (Mac) or Ctrl+Home (Windows) to jump to the top.
  3. Wait — you will see a loading spinner or a brief flicker as ChatGPT paginates in the earlier turns. On very long threads this can take 5–15 seconds. Do not skip the wait.
  4. Scroll down manually, slowly, from the top to the bottom. Every message needs to touch the viewport at least once.
  5. Once you are back at the bottom, hit Cmd+P / Ctrl+P.
  6. In the print dialog, uncheck Headers and footers, set Margins to Minimum, and enable Background graphics so the code-block backgrounds render.

This is tedious but free and needs no extensions. It works on incognito, on a locked-down work laptop where you cannot install anything, and on any Chromium-based browser (Chrome, Edge, Brave, Arc, Vivaldi).

Where it still breaks: If the chat has hundreds of messages, virtualization can re-evict earlier turns while you scroll to the bottom, and by the time you hit Print they are gone again. The next method solves that. For the general problem, we cover it in how to save a webpage as PDF without cutting off.

Method 3: Convert: Web to PDF (Article Mode)

If Methods 1 and 2 keep failing, the fix is an extension that owns the scroll-and-capture loop for you. Convert: Web to PDF was built specifically for pages that lazy-load: it walks the scroll container from top to bottom, triggers each render, waits for network idle, then composes a single PDF.

The relevant piece for ChatGPT is Article Mode. Instead of trying to capture the entire page (sidebar, model picker, prompt box, "Get Plus" banner, all of it), Article Mode isolates the main conversation column and prints only that. The result is closer to what you would expect from a native export: clean margins, no chrome, code blocks preserved with their monospaced font and background shading.

How to use it on ChatGPT:

  1. Install the extension from the Chrome Web Store.
  2. Open the ChatGPT conversation you want to save. Do not scroll — the extension handles it.
  3. Click the extension icon.
  4. Pick Article Mode.
  5. Wait. On a long thread you will see the page scroll on its own; do not touch the mouse.
  6. Save the PDF when it opens.

Everything happens in your browser — no upload, no server round trip. That matters if the conversation contains anything you would not paste into a random web form: client work, unreleased product details, a therapy-style vent session, a private financial spreadsheet you were reasoning through. The privacy story is the same one we made in file converter that never uploads your files.

The tool is Convert: Web to PDF, and it handles the same class of problem for X threads, Notion pages, and Google Docs printouts.

Method 4: screenshot stitch (last resort)

Some conversations refuse to cooperate. The share button is disabled, the browser print keeps cutting off, and even the extension chokes because the chat is inside a custom GPT with an unusual layout. For those cases there is the manual fallback: screenshot the conversation in overlapping slices and stitch them into a single PDF.

On macOS, Cmd+Shift+4 gives you a crosshair for a region grab. On Windows, Win+Shift+S opens Snip & Sketch. Chrome DevTools has a hidden Capture full size screenshot command in the command palette (Cmd+Shift+P inside DevTools) that will scroll and stitch for static pages — but on ChatGPT it hits the same lazy-load problem as printing, so use it only after forcing all messages into view per Method 2.

Once you have the images, drag them into any tool that merges JPG/PNG into a single PDF. There are dozens; the free web tools want your files, which is exactly the problem in the first place. Use a local tool like Convert: Anything to PDF or the built-in Preview app on macOS (open all images, select all in the sidebar, File > Print > Save as PDF).

Where this breaks: the output is a stack of images. It is not searchable, you cannot copy text out of it, and file sizes balloon quickly — a 60-message chat can easily hit 40MB. Reserve it for chats you truly cannot capture any other way, and accept the tradeoff.

Method 5: API + Markdown to PDF

If you are technical, and the conversation is important enough to be worth 20 minutes of setup, the cleanest possible PDF comes from bypassing the ChatGPT UI entirely. The /v1/conversations endpoint (or chatgpt.com/backend-api/conversation/<id> if you inspect network requests in DevTools while your own chat loads) returns the full conversation as structured JSON — every message, every code block, every tool call, in order, with no virtualization.

The workflow:

  1. Grab the conversation JSON.
  2. Convert to Markdown. A short script walks the message tree, prefixes user turns with **You:** and assistant turns with **ChatGPT:**, and keeps fenced code blocks intact.
  3. Render the Markdown to PDF. Pandoc with a decent CSS stylesheet works. So does any of the tools we covered in convert Markdown to PDF: best tools.

The result is a PDF that reads like a document, not a screenshot of a chat window. Code blocks get proper syntax highlighting, headings become an outline you can navigate, and the file is a fraction of the size of a screenshot-based one.

Why bother? Because if you are archiving conversations for research, legal discovery, or long-term reference, the API-plus-Markdown route is the only one that preserves the conversation as data — you can re-render it in any format later. For a one-off export, it is massive overkill.

Preserving code blocks and images

Three things go wrong most often when you PDF a ChatGPT chat, and they have specific fixes.

Code blocks losing their background. The dark grey shading behind code is a CSS background, and Chrome's default print settings strip backgrounds to save ink. In the print dialog, expand More settings and tick Background graphics. Without it, code blocks render as black text on white — technically still readable, but the visual distinction between prose and code disappears.

Code blocks getting split across pages mid-line. Long lines of code do not word-wrap in ChatGPT's code blocks; they horizontally scroll. When printed, the overflow is simply cut off at the right margin. If the code matters, either widen the paper size (Legal or A3 in print settings buys you more horizontal room), or shrink the print scale to 80–90%. The extension route in Method 3 handles this automatically because Article Mode reflows code to fit the page width.

Uploaded images showing as broken tiles. Images you uploaded to the chat are served from OpenAI's private CDN with short-lived signed URLs. If you export a chat weeks after uploading, the image URLs may have expired and the print output will show empty placeholders. There is no fix for this after the fact — the fix is to export the PDF while the chat is still fresh, or to save the source images separately at upload time.

Generated images (from DALL-E or the built-in image tool) live at more permanent URLs and usually survive, but they render at their native resolution — which can be much larger than the PDF page. If they blow out the layout, use Method 3's Article Mode, which resizes images to the column width.

Comparison table

MethodSpeedLong chatsCode blocksImagesPrivacyCost
1. Share > PDFFastYes (up to share time)PreservedUploaded shown as chipsPublic link createdFree
2. Ctrl+P + scroll fixSlow (manual scroll)Unreliable past ~100 msgsPreserved if backgrounds onYesLocalFree
3. Convert: Web to PDFFastYesPreserved and reflowedYesLocalFree extension
4. Screenshot stitchVery slowYesPreserved as imageYes but not selectableLocalFree
5. API + MarkdownSlow setup, fast reuseYesPerfectManual re-embedLocalFree (technical)

For a plain "I need this PDF in the next 30 seconds" job, Methods 1 and 3 are the only real answers. Everything else is a workaround for a specific constraint.

Frequently asked questions

How do I save a long ChatGPT chat as PDF?

Long chats are the reason browser print fails so often — ChatGPT's message list virtualizes older turns out of the DOM to keep the page fast. The reliable options are the Share link (which snapshots every message at once, no virtualization) or an extension like Convert: Web to PDF in Article Mode, which scrolls the container programmatically and waits for each lazy-load batch to render before printing. For chats over roughly 100 messages, do not rely on the manual Ctrl+P approach; it will silently drop earlier turns even after you scroll to the top.

Does ChatGPT have a built-in PDF export?

No. As of August 2026, ChatGPT has no native "Download as PDF" or "Export conversation" button. The closest built-in feature is Share > Create link, which publishes a public snapshot page you can then print to PDF. Team and Enterprise plans have workspace admin controls that can enable or disable sharing but do not add a PDF export. OpenAI has hinted at export functionality in its account settings ("Export data" produces a JSON archive of all conversations), but that is a bulk data dump, not a per-chat PDF.

Why does my ChatGPT PDF cut off earlier messages?

Because the browser prints what is in the DOM at the moment you hit Print, and ChatGPT unmounts messages that have scrolled far out of view — a pattern called list virtualization, used to keep the page responsive on long threads. The fix is to force every message back into the DOM before printing (scroll to the top, wait for lazy-load, scroll down slowly) or use a tool that automates that loop. We wrote up the underlying problem in lazy loading and virtualized lists: half-empty PDF.

How do I save ChatGPT code blocks in PDF?

Two settings matter. First, in the browser print dialog, enable Background graphics — without it, the grey code-block shading is stripped to save ink and code visually merges with surrounding prose. Second, if the code has long lines, either switch paper size to Legal or A3, or reduce print scale to around 85%, because ChatGPT's code blocks do not word-wrap and Chrome will cut them at the right margin. Article Mode in Convert: Web to PDF reflows code to page width automatically, which sidesteps both problems.

Yes, and it is often the cleanest option because share pages are pre-rendered static HTML with every message in the DOM on first load. Open the chatgpt.com/share/<id> URL in a new tab, wait for the page to finish rendering, then Cmd+P or Ctrl+P and save as PDF. Turn on background graphics for the code-block styling. The only caveat: the share snapshot is frozen at the moment you created the link, so any messages you send afterwards are not included, and you have to regenerate the link.

Bottom line

ChatGPT has no native PDF export, but three of the five methods above will get you a clean file in under a minute. Share links are the fastest if you do not mind a public snapshot. The browser print dialog works if the chat is short and you are willing to babysit the scroll. For everything else — long threads, private conversations, code-heavy chats — an extension that handles the scroll-and-wait loop is the only thing that consistently produces a full, readable PDF without uploading your conversation to a third-party server.

Grab Convert: Web to PDF if that is the case you keep running into.